OSSのJava EE / Jakarta EE / MicroProfileの実行ランタイムであるOpen Liberty,およびその製品版であるWebSphere Libertyは,4週間ごとに新しいFixpackが公開されバージョンが更新されます。ことしは,1月のv25.0.0.1から12月のv25.0.0.12までの12の新しいバージョンが公開されました。
この記事では,2025年に公開されたFixpackでの新機能をまとめてご紹介します。
Libertyは,継続的シングルストリームで提供されており,メジャーバージョンアップによるFixpackストリームの切り替えはありません。単一のバージョン・ストリームとしてFixpackが提供され続けます。機能追加についても数年の一度のメジャーバージョンアップでとかではなく,それぞれのFixpackごとに,新機能が随時リリースされます。
それでも,ゼロマイグレーション・ポリシーによって,Fixpack適用時のアプリケーションや構成ファイルのマイグレーションは,原則として不要となっています。
MoRE (Modernized Runtime Extension for Java)
こちらはOpen Libertyではなく,製品版のWebSphere Libertyのみの新機能となります。
今年のLibertyの一番大きな新機能がMoREです。こちらは,従来型のWebSphere Application Server Network Deploymetエディション(WAS ND)で提供されていたND Cellによる統合管理を拡張し,Java 17で稼働するWebSphere Libertyサーバーを,その管理下に組み込むことができるようになる機能です。
ND Cellでは,Cell全体を管理するDeployment Managerが稼働するDmgr Nodeが中心となり,複数の従来型WAS(tWAS)が稼働するNodeを統合管理しています。各Nodeには,Node Agentが稼働していて,Development Managerと連携しつつ,Node内のアプリケーションサーバープロセスを管理しています。
MoREのFeature Packを適用することで,Libertyを稼働させるMoRE Nodeを新たに作成することができ,そこでNode Agent配下でLibertyを稼働させることができるようになります。Libertyは,Deployment Managerを経由して,管理コンソールやwsadminスクリプトで管理をすることができるます(tWASはJava 8しか対応していません)。
これにより,どうしても従来型のWAS NDの統合管理の利用を継続する必要があるお客様にも,Java 17が必要なプログラム(Spring Framework 6.x以降など)を実行することが可能になります。
MoREの詳細な構成方法については,IBMサイトのDocumentを参照ください。
新仕様への対応
Java 24サポート (v25.0.0.4) / Java 25サポート (v25.0.0.10)
Libertyでは,新しいJava SE仕様への対応は,おおよそ新仕様の公開後の翌月のFixpackで行っています。
Java 25は,2年に一度のLTS(Long Term Support)バージョンなので,広くバージョンの一つになるでしょう。
またLibertyでは10月に,Java 8対応を2026年のv26.0.0.9までとしていたものを,2028年のV28.0.0.12までの対応に延長しました。
現在,Java 8でLibertyをご利用いただいている方にとっては,移行の期限にさらに余裕ができましたが,LibertyやSemeru以外のJava技術でもJava 8対応の終了が続いていますので,着実な移行計画の推進をお願いします(たとえば,Libertyでも広く使われているビルドツールMavenでは,Maven 3.9.xまではJava 8での実行をサポートしていますが,次期のMaven 4.0ではJava 17移行が必要です)。
MicroProfile 7.1対応 (v25.0.0.8)
MicroProfile 7.1 は,2025年4月に公開された小規模なアップデートであり,二つの仕様のマイナーバージョンが更新されました。
- MicroProfile Telemetry 2.1 (2.0から更新)
- MicroProfile OpenAPI 4.1 (4.0から更新)
Libertyでは,8月に公開されたv25.0.0.8より,MicroProfile 7.1に対応しています。
APIの機能強化
MicroProfile Telemetry 2.0で収集できる情報の強化 (v25.0.0.4/v25.0.0.5)
MicroProfile Telemetry 2.0は,OpenTelemetry標準に準拠したかたちで,分散トレースやメトリック,ログを取得できるようにする仕様です。
4月のv25.0.0.4では,Libertyが提要する情報ソースとして,Libertyの監査イベントを含めることができるようになりました。
利用するには,MicroProfile TelemetryとあわせてAuditフィーチャーを有効にします。これにより,sourceとしてauditが利用できるようになります。
<featureManager>
<feature>audit-2.0</feature>
<feature>mpTelemetry-2.0</feature>
</featureManager>
<mpTelemetry source="audit"/>
また,5月のv25.0.0.5では,アクセスログについても送信できるようになりました。
<featureManager>
<feature>mpTelemetry-2.0</feature>
</featureManager>
<httpAccessLogging id="accessLogging"
logFormat='%h %u %{t}W "%r" %s %b %D %{R}W'/>
<httpEndpoint id="defaultHttpEndpoint"
httpPort="9080" httpsPort="9443"
accessLoggingRef="accessLogging" />
<mpTelemetry accessLogFields="logFormat" source="accessLog"/>
詳細な構成方法などについては,OpenLiberty.ioの4月のBlog(日本語)を参照してください。
MicroProfile Health 4.0のJava EEとの共存 (v25.0.0.6)
MicroProfile Healthは,アプリケーションが他のプログラム,たとえばOpenShiftやKubernetesなどのプラットフォームからの生存確認リクエストに対して,適切な応答を返すための仕様です。
最新のFeatureである,MicroProfile Health
4.0(mpHealth-4.0)は,Jakarta EEの名前空間(jakarta)に対応したバージョンであり,Java EEの名前空間(javax)である,Java EE 7/8のFeatureとは共存できませんでした。そのため,Java EEのアプリケーションからMicroProfile Healthを利用するためには,古いバージョンであるMicroProfile Health 3.1(mpHealth-3.1)以前と組み合わせる必要がありました。
6月のv25.0.0.6から,mpHealth-4.0がJava EEのAPIと組合わせて利用することができるようになりました。Java EE 7/8のアプリケーションからも,最新の機能が利用できるようになります。
MicroProfile Healthの詳細な構成方法などについては,OpenLiberty.ioの6月のBlog(日本語)などを参照してください。
コンテナ対応の強化
InstantOn対応Featureの追加(v25.0.0.1/v25.0.0.4)
Liberty InstantOnは,コンテナ環境でLibertyの起動を高速化する機能です。LinuxカーネルのCheckpoint/Restore In Userspace(CRIU)機能を使用して,起動済みのLibertyプロセスの状態をコンテナイメージ内のファイルに保存(Checkpoint)し,ファイルからプロセスを復帰(Restore)することで数十〜数百ミリ秒でのサーバーの起動を可能にします。Nativeアプリケーションにコンパイルする高速起動技術と異なり,InstantOnはJavaの全機能を利用できるという大きなメリットがあります。
InstantOnは,2023年の6月に正式版となり,現在icr.ioで公開されているOpen Libery/WebSpehre Libertyのオフィシャルイメージで利用が可能になっています。
1月のv25.0.0.1では,以下のFeatureがInstantOn環境で利用可能になりました。
-
batch-1.0Batch API -
batch-2.0Jakarta Batch 2.0 -
batch-2.1Jakarta Batch 2.1 -
jcaInboundSecurity-1.0Java Connector Architecture Security Inflow 1.0 -
connectorsInboundSecurity-2.0Jakarta Connectors Inbound Security 2.0
4月のv25.0.0.4では,以下のFeatureが追加されています。
-
j2eeManagement-1.1J2EE Management 1.1 -
appClientSupport-1.0Application Client Support for Server 1.0 -
appClientSupport-2.0Jakarta Application Client Support for Server 2.0 -
wsSecurity-1.1Web Service Security 1.1
現在のInstantOn対応Featureの一覧は,こちらを参照ください。
サーバー構成
Webモジュール・クラスローダーの設定の追加 (v25.0.0.1)
EARにふくまれるWARファイルで,マニフェストClass-Path属性で指定されたJARファイルが,どのクラスローダーから読み込まれるかを構成することができるようになりました。
従来はWARのクラスローダーからロードされていましたが,他のアプリケーションサーバーからの移植性を高めるため,EARのクラスローダーからロードすることができるようになっています。
<enterpriseApplication location="myApp.ear"
webModuleClassPathLoader="ear" />
<path>要素によるライブラリの構成 (v25.0.0.3)
Libertyで利用するJavaのライブラリを構成するには,<file>要素でJARファイルを指定するか,<folder>要素でJARが格納されたディレクトリを指定する必要がありました。
<library id="someLib">
<!-- path to a jar -->
<file name="libs/lib1.jar"/>
<!-- path to a folder -->
<folder dir="libs/lib2folder"/>
</library>
これらを自動判定して,ファイルでもディレクトリでも指定できる<path>要素が追加されました。
<library id="someLib">
<!-- path to a jar -->
<path name="libs/lib1.jar"/>
<!-- path to a folder -->
<path name="libs/lib2folder"/>
</library>
アプリケーション・クラスローダーのOverride (v25.0.0.10)
EARやWARなどのアプリケーションに含まれるクラスを,上書きする設定が可能になりました。
アプリケーションの追加設定で行われる<classloader>要素で,overrideLibraryRef属性の指定が可能になっています。この属性で指定されたライブラリの中のクラスは,アプリケーション内のクラスよりも優先して検索されるため,その内容を上書きすることが可能です。
アプリケーションを再構築することなく,緊急でクラスを入れ替える必要がある場合などに使用できます。
<webApplication location="appThatNeedsFix.war">
<classloader overrideLibraryRef="someImplFix"/>
</webApplication>
<library id="someImplFix">
<path name="someImplFix.jar"/>
</library>
セキュリティ
FIPS 140-3対応 (v25.0.0.3/v25.0.0.12)
FIPS 140(Federal Information Processing Standard 140-3)とは,米国国立標準技術研究所(NIST)が策定した暗号モジュール(暗号化・復号を行うハードウェア・ソフトウェア部品)のセキュリティ要件に関する国際的な標準規格です。FIPS 140-3は,その最新版です。
Libertyは,v25.0.0.3でIBM Java 8との組み合わせで,v25.0.0.12ではさらにSemeru Runtimesの11.0.29, 17.0.17, 21.0.9, 25.0.1以降との組み合わせで,FIPS 140-3対応が可能になりました。
具体的なFIPS有効化の手順などについては,2025年12月のOpenLiberty.ioのブログを参照してください。
AES-256パスワードのサポート(v25.0.0.2/25.0.0.12)
Libertyの構成ファイルなどに記述するパスワードについては,XOR処理による難読化,AES 128bitによる暗号化がサポートされていました。
v25.0.0.2から,AES 256bitによる暗号化がサポートされました。securityUtilityで--encoding=aesを指定してパスワードをエンコーディングしたときの処理が256bitで行われます。互換性のためAES 128bitの対応も継続しており,--encoding=aes-128を指定すると,128bitで処理が行われます。
$ securityUtility encode --encoding=aes --key=myAESkey "superAES256password"
このコマンドで作成された文字列をLibertyでパスワードとして使用する際には,--keyで指定した文字列をWLP_PASSWORD_ENCRYPTION_KEY環境変数に設定するなどします。
このkeyに指定された文字列から,実際の暗号化処理に使用するAES鍵を生成するには,重い負荷のかかる処理を実行する必要があります。v25.0.0.12からは,この処理を事前に済ませ,Liberty起動時の負荷を軽減することができるようになりました。
$ securityUtility generateAESKey --key=myAESkey
で生成される文字列を,WLP_AES_ENCRYPTION_KEY環境変数に指定するなどします。
JWT BuilderでのECDH-ESのサポート (v25.0.0.9)
JSON Web Token 1.0 (jwt-1.0)Featureが拡張され,jwtBuilder の鍵管理アルゴリズムとして ECDH-ES(楕円曲線Diffie-Hellman鍵管理)をサポートするようになりました。
詳細については,2025年9月のOpenLiberty.ioのBlog(日本語)を参照してください。
2025年のまとめ
2025年にかけては,MoREの開発に多くの開発リソースが投入されたため,その他の新機能は若干少なめです。ですが来年にかけては,また多くの更新がLibertyに対して行われる予定です。
これからも,Open Liberty/WebSphere Libertyは,従来のアプリケーションの継続利用も,新機能を活用したアプリケーションの開発も両立されつつ,発展を継続していく予定です。ご期待ください。
