9/27 (土)
[Java] Java 8 から Java 21 へマイグレーション
Java 8 で書かれたプログラムを Java 21 へ変更する。 Java EE から Jakarta EE への変更に伴い、javax パッケージを jakarta パッケージへの変更も必要だが、それ以外の部分について記述する。
文法の変更に対応
最新の Java で非推奨になった記法を修正する必要がある。
// 非推奨(Java 9以降) Integer i = new Integer(1); // 推奨(Java 9以降) Integer i = Integer.valueOf(1);
その他、finalizer も非推奨となっており、どこかで廃止される。
Java モジュールシステム(JPMS)でのアクセス制限を回避
Java 9 以降で java.base モジュールが java.net.HttpURLConnection.method
のような内部フィールドをリフレクションで直接アクセスすることを禁止した。
結果として InaccessibleObjectException が発生するようになる。
これを回避するために Java VM のオプションに --add-opens java.base/java.net=ALL-UNNAMED を指定する必要がある。
export JDK_JAVA_OPTIONS="--add-opens java.base/java.net=ALL-UNNAMED"
GC ロギングの変更
Java 8 から GC ロギングの指定方法が Unified GC Logging としてまとめられ、Java 21 で廃止された Unified GC Logging 以外のオプションは廃止された。
// 修正前 java -XX:+PrintGCDateStamps -Xloggc:/path/to/app-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M ... // 修正後 java -Xlog:gc*:file=/path/to/app-gc-%t.log:time,uptime,level,tags:filecount=10,filesize=10m ...
9/13 (土)
Apache Solr のバージョンアップトラブル
Apache Solr を 7 から 9 にバージョンアップをしながら solr イメージを作る方法を試行錯誤している。 やりたいのは最初からスキーマを設定したコアを作った solr イメージを作ることだ。
まず独自のスキーマを my-managed-schema.xml として用意する。 これを _default に格納して precreate-core コマンドを使うと solr が起動する前のコアを準備することができる。
FROM solr:9.9.0 ENV SOLR_OPTS="-Dsolr.disable.shardsWhitelist=true -Dsolr.disable.allowUrls=true" COPY --chown=solr:solr my-managed-schema.xml /opt/solr/server/solr/configsets/_default/conf/managed-schema.xml precreate-core mycore1 precreate-core mycore2 precreate-core mycore3
問題は独自スキーマをどう作るかだ。 仕様を知っていれば my-managed-schema.xml を直接書くか、素の Solr を作って curl -X POST -H 'Content-type:application/json' --data-binary @schema.json http://localhost:8983/solr/{core}/schema を実行してスキーマを登録して managed-schema.xml の取得するになる。