OSSのエンタープライズJavaアプリケーションサーバーOpen Libertyならびに,その製品版のWebSphere Libertyの,バージョン22.0.0.1から22.0.0.5までの新機能についてご紹介します。
API
MicroProfile 5.0対応
2021年12月に公開されたMicroProfile 5.0に,1月に出た22.0.0.1で対応しました。
今回のUpdateは全てがオレンジ色で,原則全てのパッケージがアップデートされています。Jakarta EE 9.0の名前空間の変更(javax→jakarta)に対応しているためです。詳細な変更点については,Eclipse Foundationのプレゼンテーションを参照ください。
CommonJ WorkManagerのサポート
Libertyランタイムでは,従来のWebSphere traditionalランタイムで提供されていたAPIのうち,古い非推奨となったAPIや独自APIなど,いくつかサポートしていないAPIがあります。そのようなAPIを使用しているアプリケーションは,Libertyへ移行する際に大きな書き換えが必要となっています。
その一つがCommonJでした。これはJava EEアプリケーションで非同期処理を実装するために提供されていたIBM独自のAPIです。Java EE標準で同等の機能がConcurrency Utilities for Java EEとして提供されたため,非推奨となりました。
CommonJはLibertyランタイムには実装されいなかったのですが,Heritage プログラミング・モデルとして提供されるようになりました。heritageAPIs-1.1およびconcurrent-1.0フィーチャーを有効にすれば,従来のCommonJを使用したアプリケーションが,そのままLibertyランタイムの上で稼働するようになります。
もちろん,これから新規に作成するアプリケーションでは,CommonJではなく,Concurrency Utilities for Java EEを使用するようにしてください。
Core Runtime
server.envの変数対応
Libertyランタイムのプロセスから参照可能な環境変数を設定するのがserver.envファイルです。通常はserver.xmlと同じディレクトリに置かれます。
このファイルの中では,変数の展開はおこなわれません。そのため,
hostname=a.b.com
url=http://${hostname}:9080
というような設定をおこなっても,urlはhttp://${hostname}:9080
になってしまいます。22.0.0.1から,# enable_variable_expansion
というコメント行を追加することにより,変数の展開がおこなわれるようになりました。
# enable_variable_expansion
hostname=a.b.com
url=http://${hostname}:9080
と構成することによりurlはhttp://a.b.com:9080
という値に設定されるようになります。ただし,この挙動はプラットフォーム依存です。Windows環境では正常に動作しません。Windows環境で変数を展開したい場合は,以下のように感嘆符で変数名をくくる必要があります。
# enable_variable_expansion
hostname=a.b.com
url=http://!hostname!:9080
JVMのワーキングディレクトリ
LibertyのJVMプロセスは,WLP_OUTPUT_DIR
環境変数(デフォルトでは${wlp.install.dir}/usr/servers
)で指定されたディレクトリの下のサーバー名のディレクトリをカレントディレクトリにして実行されています。
このカレントワーキングディレクトリを環境変数SERVER_WORKING_DIR
で変更できるようになりました。相対パスで指定した場合にはデフォルトからの相対パス,絶対パスを指定した場合には,そのディレクトリが使用されます。
Java 18サポート
4月に出た22.0.0.4から,Java SE 18環境での実行がサポートされるようになりました。
Security
配布パッケージの署名
Open LibertyならびにWebSphere Libertyの配布パッケージに,署名ファイル(sigファイル)が添付されるようになりました。IBMから提供されている公開鍵を使用して,以下のように配布ファイルを検証することができます。
% openssl dgst -sha256 -verify public_key.pem \
-signature wlp-base-all-22.0.0.6.jar.sig \
wlp-base-all-22.0.0.6.jar
Verified OK
Log4Shell脆弱性への対応
Libertyの持つクラスローダーに,脆弱性を持つ既知のクラスのロードをブロックする機能が追加されました。現在はorg.apache.logging.log4j.core.lookup.JndiLookup
という名前のクラスのロードが拒否されるようになっています。これにより,Liberty上で稼働するLog4jを使ったアプリケーションが,Log4Shell脆弱性(CVE-2021-44228)から保護されます。
JWE for OpenID Connectのサポート
認証情報などを送受信するときに使用されるJWT(JSON Web Token)フォーマットで,内容を暗号化して送受信する仕組みがJWE(Web Encryption)です。OpenID Connect Client 1.0フィーチャーやSocial Media Login 1.0フィーチャーで,暗号化されたJWEの使用ができるようになりました。詳細については,Open Liberty Blogのアップデートを参照してください。
Developer Experience
JAX-RPCアプリケーションの変換ツール
SOAP通信によるシステム間連携を実装するためのJavaのAPIとしては,最初に出たJAX-RPC仕様と,後から出た改良された仕様であるJAX-WSの二種類があります。現在はJAX-RPCは非推奨となり,JAX-WSの利用が推奨されています。LibertyでもJAX-WSは利用できますが,JAX-RPCの利用はサポートされていません。そのため,JAX-RCPを使用したアプリケーションをLibertyで実行するためには,アプリケーションを大きく書き変える必要があり,Libertyランタイムへ移行する際の障壁の一つとなっていました。
このJAX-RPCからJAX−WSへの変換を自動でおこなうWebSphere Liberty JAX-RPC Conversion Tool for Maven and Gradleが提供されています。使用方法については,こちらから参照してください。
Paketo Buildpackの提供
Dockerfileなどを記述しなくてもアプリケーションを実行するコンテナイメージを作成できるBuildpackを提供するOSSプロジェクト,Paketo。Libertyを利用してアプリケーションを実行できるBuildpackが提供されていいます。こちらから利用できます。
利用方法については,Open Liberty Blogの記事を参照してください。