きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

Java

jmockitのDeencapsulationでstatic finalを書き換えできるの?それは使ってるバージョンによる!

今、迷っている。 書き換えられるっぽい過去の経験、書き換えられない最近の経験が混ざっている。 よし、確かめよう。 ダラダラ書く。Deencapsulationのコードをgithubで読んだ。(もちろんコール先も読んだ) https://github.com/jmockit/jmockit1/blob/mas…

GradleのtestLogging

testLoggingの初期値(LogLevel別) 調べたことを表にまとめるとこうだった。 debuginfolifecyclewarnquieterror events STARTED○××××× PASSED○××××× SKIPPED○○×××× FAILED ○○○××× STANDARD_OUT○○×××× STANDARD_ERROR○○×××× displayGranularity222222 maxGra…

独自クラスローダーとJacoco

これまではApache Antで、事前にJacocoのoffline instrumentationを施してからテストをしていたが、さいきんgradleに乗せ代えてon the flyになり、カバレッジが取れてない状況があった。独自クラスローダーで、クラスを再読み込みしているテストケースでうま…

JMockitで拡張クラスローダーに読まれるクラスをモックするのを足掻いた結果

惨敗だ。クラスローダーの委譲関係は、親が先で通常3つのクラスローダーがいる。ブートストラップ・クラスローダー拡張クラスローダーアプリケーション・クラスローダー(システム・クラスローダー)MockUp対象クラスが拡張クラスローダーにいる。クラスを書き…

ファイルの中身全体をJavaの正規表現でマッチングしたいんだが

PatternやMatcherを使う想定。まず、Pattern#compileして、Patternを作る。複数行にしたいならフラグも考える。PatternができたらMatcherを作りたい。そのとき必要なのはCharSequence。そこはファイルの内容全部を渡したいが、Javaヒープ使いたくないな。Fil…

突如として現れたJZOSのRRSクラス

目を疑った。つい数日前まではなかったパッケージとクラスが出現。しかもSince 2.1.0とクラス説明にある。JZOSのバージョンはJava6.0.0のGAのときに2.0.0であり、SR1のタイミングで2.2.1になっているのだが、その間の隠されたバージョンに作られて、Javadoc…

JAXBの予期しない要素(unexpected element)の話

アンマーシャラーで起きるやつの話。 この2カ月くらいで2回見た。 URIはこうなんだけど、localはこうだぜ的なやつ。 予期しない要素(URI:"http://www.example.org/a"、ローカル:"A")です。予期される要素はです これはわざと発生させた。 xsdからJAXBクラス…

いまさらJavaSE6のServiceLoaderを触ってみた

DIコンテナ主流の時代で使われることのないServiceLoader。 CDIでてきてから一層使われることのないServiceLoader。 Javaのごく一部で使われているServiceLoader。 一般的なプログラマが基本的に使う必要性がないServiceLoader。 「サービスを表すインタフェ…

z/OS上のJavaのスレッドに関すること

基本的にJavaスレッドは、TCBに関連付いている。 ただ、javacoreを見る限り、Javaから見えてるNativeスレッドというものは、 USSでいうところのスレッドを指しているようだ。 z/OSには、TCBやSRBみたいなものはあるが、 もともとUnix由来のプロセスやスレッ…

jdmpviewの誤算

金曜日は雪で会社に行かず、家から繋いでダンプを取得。WASのMust Gatherであるハング時のOMVS+RRS+CR+SRな内容を取得。それをjextract。MATは読み込み時に、どのアドレス空間のJVMを解析するかを聞かれるから良い。一方でjdmpviewは厄介。IBM Java6.0.1でco…

シングルクォートとダブルクォート

Javaではよくダブルクォートを使う。 シングルクォートはcharへの代入や、StringBuilderへのcharのappendなどで使う程度だ。 SQLではシングルクォートを使う。 あんまりダブルクォートを使う機会はない。 Oracleで覚えたせいだろうかな。 シェルではダブルク…

CMP Applicationをz/OSのUSS上で動かく方法

ConfigManagerProxy.jarを使って、 WebSphere Message Brokerを管理するのは、 WMBを使ったテストの自動化する上では必要なやり方だろう。 CMPアプリケーションを書く人も少なく、 しかもz/OS上で動かすとか普通しないだろうなぁ。 ははは、役に立たないブロ…

シノニムとdb2sqljcustomize

DB2の接続ユーザ(CONNUSER)と、スキーマ(SCHEMA1)が異なる場合に、 SCHEMA1スキーマからシノニムで別スキーマ(SCHEMA2)のテーブルに飛ばしていると、 sqljのカスタマイズ&バインドに失敗する。 これはcurrentSQLID=SCHEMA1をurlに指定することでしか回避でき…

若手に宿題を出してみたよ IBM JDKの文字コード問題

2年目社員への挑戦状w もともとx-IBM1399の文字化け調査をするために書いた簡易な検査コードを転用して、 すべての利用可能な文字コードに同じことを試したところ、出るわ出るわになった。 いつもなら自分の趣味としてPMRをオープンするんだが、 なんか職場…

x-IBM943とx-IBM943Cの違い

暇つぶしの文字コード調査なり。 x-IBM943は基本的にはJIS X 0208だったかと思う。 x-IBM943Cとは何者か。 プログラムで検証してみたところ、どうやらたった2文字の違いしか無いように思える。 1つ目の文字。 U+000A5(YEN SIGN)とU+0203E(OVERLINE) IBM943も…

x-IBM1399(EBCDIC)のEncoderについての調査

nioのEncoderをベースに調査してみた。 いちおうioの方も試しているけども・・・。 suspicious codepoint encode()========= 15 codepoints U+0000A U+00085 6F codepoints U+0003F U+0303F U+0FFE8 U+0FFE9 U+0FFEA U+0FFEB U+0FFEC U+0FFED U+0FFEE 0E60F1…

JavaでAppDataの場所を取ってくる方法の考察

前にちらりとYahoo!知恵袋を見ていたときのことである。 なんかJNIがどうとか言っていたので「?」と思ったのである。 まあ、その他に、user.homeプロパティを取ってくるのも載っていた。 user.homeだとC:\Users\youruserな感じのが取れる。 まあ、それが取…

SQLJトランスレータのバージョン確認方法

java -cp sqlj.zip sqlj.tools.Sqlj -version java -cp sqlj4.zip sqlj.tools.Sqlj -version なんか周りの人は知らなかったようなので教えておいた。 ついでにネットでも探しにくいのでここに一筆書いておく。 基本的にはdb2jcc.jar/db2jcc4.jarと同じような…

暇つぶしにjava.lang.invokeを使ってみた

ただのJava屋なので、まず使うことはないですが、試しに使ってみました。 import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; import java…

ibm.swapLFについて<続々>

ibm.swapLFにかかりきり。 System.outに使われるクラスが、 WAS for z/OSでは普通のプラットフォームとは違うクラスであることが分かった。 USSでWAS付属のjava叩いても、WAS上とは違いがでる。 com.ibm.ws390.SystemOutErrCodepageというプロパティがあるこ…

クラスファイルで見るマルチキャッチ(Multi-Catch)

JavaSE7で使えるMulti-Catch。 とっくの昔に調査済みだけど、 復習もかねてクラスファイル・エディターで見た内容を添えて書いてみます。 public void multiCatch() { try { multiThrow(); } catch (IOException | SQLException | ClassNotFoundException e)…

JZOSでデータセットの動的アロケーション

日本に帰ってきてて、 息抜きもかねて動的アロケーションするコードを書いた。 しかし、失敗。およよ? JZOSで動的アロケーションの方法として考えられるのは2種類ある。 自分の過去の経験だと片方(bpxwyn)がうまくいかなかったので、 com.ibm.jzos.AccessM…

java.lang.IncompatibleClassChangeErrorの原因

たまにIncompatibleClassChangeErrorで私のブログにきてる人がいたみたいなのでその理由を書いてみようと思いました。 このエントリーはまともな原因を昔書かなかったことへの申し訳なさからきています。 たぶんさまざまな原因があるのでしょうが、 2種類ほ…

クラスファイルで見るJavaの文字列連結

「文字列連結をする時は+で繋げるな」ってコーディング規約に書いてあると思う。 それはコンパイラの改善でとっくの昔にStringBuilderに変わってる。 そんなことは少しJavaを知ってる人なら誰でも知っているさ。 今日書くのはそれ意外の部分についての復習…

クラスファイルで見るJavaのAutoBoxing

昔書いたことがあるけど気が向いたのでjavapの結果もそえてみよう。 面倒臭いからClass File Editorの結果で勘弁してほしい。 まあいまさら書くことでもないんだけど。 Integer boxing_i = 1; int unboxing_i = boxing_i; 上記のコードがこんな感じになりま…

ibm.swapLFについて<続>

ibm.swapLFのつづき。 別に進展らしい進展はないのだけれど、 気になったことが増えたので書いておく。 0x15(EBCDICのNL)を0x25(EBCDICのLF)に変えるこのプロパティ。 分散系との互換のためにあるのだと思っていたらどうも違うっぽい? java.nioのおさらいも…

ibm.swapLFについて

ibm.swapLFなるものを調査する機会があった。 正直まだよく分かってない。。。 IV18977: IMPLEMENTING SWAPLF FUNCTIONALITY FOR IBM-037 CODEPAGE このへんの話だ。 ちょっと表を添えておくよ。 EBCDIC ASCII CR 0x0D 0x0D LF 0x25 0x0A NL 0x15 この-Dibm.…

java.math.BigDecimalと浮動小数点数の歴史

わりとどうでも良い歴史の時間です。 まずは浮動小数点の規格についてふれておこう。 IEEE754-1985 = 2進浮動小数点数 IEEE854-1987 = 基数に依存しない浮動小数点数の規格(とは言っても・・・) IEEE754-2008 = IEEE754-1985 + IEEE854-1987 = 主に10進浮…

IBM Support Assistant V5 Beta2 (ISA5 Beta2)使ってみた

まえにISA V5 Beta1を試していたんだが、 わりとさいきんBeta2が出ていたのでインストールしてみた。 IBM Software Support - IBM Support Assistant このサーバーはLiberty Profileだと思う。 というのもwlpフォルダがあるからだ。Beta1でもそうだった。 IS…

気になるWebSphere本

ひとつ目はWebSphere Internalsという洋書。 UKのユーザーグループの人が書いたもので面白そう。 これはV7なので新しいわけではないが、 濃ゆいことが書かれていそうなんだよね。 もうひとつは日本IBMの人が書いてる和書。 何人か知ってる人の名前がある。 …

java.math.BigDecimalの最大桁数(理論値)

面倒臭いことを調べることになったJavaプログラマーに捧ぐ すこし時間を割いて最大桁数を計算してみることにしました。 結論からいうと 2793926648桁くらいだと思う。 精度の限界は646443000桁くらいです。 無量大数が128桁です、と補足しておこう。 動かす…

Javaプログラマーのためのjava.math.BigDecimalまとめ

以前書いたメモ的なエントリーを読み返してみて、 簡単なエントリーに書きなおそうと思いたった。 java.math.BigDecimalの構造 「精度(precision)」と「スケール(scale)」と「一般的な桁数」の違い 精度とスケールの違いを正しく把握しているかを試すのに、 …

HelloWorldで学ぶJavaのクラスファイル

暇つぶしにクラスファイルについて語ってみよう。 今回の勉強の元となるソースはこちら。 三分でクッキングできるほど甘くないですよ。 このエントリーを書くのに実際は丸一日もかけて・・・ その情熱を人材育成に使えって話だ。 ソース(便宜上、行番号を添…

java.util.prefsパッケージの基本的な使い方

なかなか使う機会もないパッケージです。 JDK1.4からと、思ったよりも古くからあるようです。 Windowsではレジストリが使われてます。 システムルート HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs ユーザールート HKEY_CURRENT_USER\Software\Java Soft\Pre…

JZOSのWLM API

こういうのが出てたのは知っていたよ。 今日たまたま気になったので少し見てみた。 IBM JZOS Toolkit API これはIBM JDK 6.0.1からのAPI。 IBM: JZOS Java Launcher and Toolkit Overview WAS for z/OS V8.0なら使えるけれども、 このAPIをWAS上で使うことは…

JNIコードとSHRLIBRGNSIZE

昔、JNIコードを書いたのだが、最近になって一点考慮漏れがあることに気付いた。 正直そこまでたいそうな話ではないかもしれない。 .soに、Extended Attributesを付けることを考えてなかった。 extattrというのは、4つのオプションがある a=APF authorized p…

ReflectionとNative OOM

前から不思議に思ってた事が1つ分かった。 IBM Potential native memory use in reflection delegating classloaders - United States リフレクションでMethodごとにsun/reflect/DelegatingClassLoaderや sun/reflect/GeneratedMethodAccessor<N>という具合の</n>…

JIT Compiler Testarossaとjavacore

Testarossaについてはあまり資料が見当たらないのだが、 少しだけ気付いてることはあるので書いてみる。 一年か二年前にも実験してたが、今回気が向いたので、理解を深めてみた。 WAS8.0からJ9のバージョンはR26になり、 どうもJITコンパイラであるTestaross…

ラージ・ページ・サポート(-Xlp)の考察

SRに-Xlpで1MBのFRAMEを取れないって事象を調べている。 前から疑問だった、-Xlp指定してないのにCRが1MBのFRAME取ってる件もついでに調べている。 少し理解が深まった気がする。 まず-verbose:gcでrequestedPageSizeとpageSizeは確認している。 確かに1MBの…

JZOSのZUtilのsubstituteSystemSymbolsについて

使ったことはないけれど、その使い方を書いてみる。 理屈として、IEASYMxxにおけるSYMDEFと同じと思われる。以上、説明終了w &SYSNAME &SYSCLONE &SYSPLEX &SYSR1 &SYSALVL および、SYMDEFで定義したものが取れると思う。 取れるだけじゃなくて、substring…

Javaにおける定数

「定数」という言葉の定義が意外と曖昧ではないだろうかと昔から思っていた。 「定数はstatic finalで宣言する」というマニュアル的な表現に疑問を思ってきた。「static final宣言したものは、定数とは限らない」 static final String A; static{ A = "HOGE"…

Java7のString Switch

家で試してみました。サンプルで書いたコード。 "1a"と"2B"は同一ハッシュコード1616です。 private String test1(String val) { String ret = null; switch (val) { case "1a": ret = "match 1a"; break; case "2B": ret = "match 2B"; break; default: ret…

staticメソッド/変数について思うこと

しばしばこの思いを忘れてしまうのだが、 staticメソッドはあまり使いたくないな、と思うのが本音。 よく共通的な役割を持つメソッドを、superクラスに持たせるか、Utilityのstaticメソッドにするか悩む。 無論、クラスの役割として意味のあるものであればsu…

仕様を網羅することの難しさ

何年前に下書きして放置したのか覚えてないけど、せっかくなのでUPしとく。 書こうと思ったことが思い出せないけど、 「空白文字とは」うんぬんの事は伝えておきたいことだから。 自分が書いた部分のコードを、ある特定のクラスの特定メソッド内に閉じたらば…

検査例外と非検査例外、あとエラー。

なんで正月にこんな事書いてるんだろうか・・・。 長年Javaをやっていても、「検査例外」と「非検査例外」の使い分けにコレと言った答えが出ない。 個人的には「検査例外」を好む。 誰かが作ったプログラムの「非検査例外」をcatchしないといけない状況に陥…

z/OSでJavaを活用するためのJZOSのTips

com.ibm.jzos.CatalogSearchクラスというのがある。当然ながら、カタログに登録されてないものは取ってこれない。 まあカタログに登録しない使い方をすることは稀だろう。前に作ったコードを思い出しながら解説しよう。 CatalogSearch cs = new CatalogSearc…

Enumとswitch文

しばらくぶりの執筆。書きたいことがなかったので、どうでもいいことを書いてみる。Enumのswitch文はどのように実現されているかという話です。元々switch文は、通常tableswitchオペコードが使用されます。 えーと、lookupswitchが使われることもあるんだけ…

-1の-1乗が1になってるよ

珍現象。 ふむ、バグという名前の地雷を踏んだようだ。 たぶんバグ、きっとバグ。 なんでこんなバグが残ってるんだ。 おいらの自作Java累乗関数でも計算できるのに。 -1の-1乗は1と誤り。 -2の-1乗は-0.5と正しい。 公式から予想するに、の処理が怪しい。 こ…

34桁目のせめぎあい

なかなか34桁目まで合わすというのは苦労が伴う。 とりあえずMathContextに69桁くらい設定したら、なんとか計算出来たっぽい。 平方根の計算で検算しながらやってみた。 9.99999999999999999999999999999999999997E6144の平方根の難易度が高い。 検算(2乗)す…

累乗計算が完成した

exp関数も出来たし、logn関数も出来たので、power関数も出来た。 性能もなかなか良いよ。まさかの4ミリ秒台が出てきた。 doubleなら50ナノ秒あたりだろうけど。 public static BigDecimal power(BigDecimal x, BigDecimal y){ return exp(y.multiply(logn(x)…