OSSのJava EE / Jakarta EE / MicroProfileの実行ランタイムであるOpen Liberty,およびその製品版であるWebSphere Libertyは,4週間ごとに新しいFixpackが公開されバージョンが更新されます。ことしは,1月のv24.0.0.1から12月のv24.0.0.12までの12の新しいバージョンが公開されました。
この記事では,今年公開されたFixpackでの新機能をまとめてご紹介します。
Libertyは,継続的シングルストリームで提供されており,メジャーバージョンアップによるFixpackストリームの切り替えはありません。単一のバージョン・ストリームとしてFixpackが提供され続けます。機能追加についても数年の一度のメジャーバージョンアップでとかではなく,それぞれのFixpackごとに,新機能が随時リリースされます。
それでも,ゼロマイグレーション・ポリシーによって,Fixpack適用時のアプリケーションや構成ファイルのマイグレーションは,原則として不要となっています。ただ,このゼロマイグレーション・ポリシーにも例外があり,今年は脆弱性の修正が目的のデフォルトの変更が行われました。
新仕様への対応
Java SE 22対応(v24.0.0.4) / 23対応(v24.0.0.10)
LTSではないJava SE仕様の更新であるJava SE 22/23に,それぞれJava SE仕様の公開直後のLibertyの更新で対応しています。
IBMのOpenJDKディストリビューションであるSemeru Runtimesも,Java 23からは日を置かずに更新されるようになり,新しいJava SE仕様をいち早く試せるようになっています。
MicroProfile Reactive Messaging 3.0対応(v24.0.0.2)
MicroProfile Reactive Messaging 3.0 mpReactiveMessaging-3.0
および MicroProfile Streams Operators 3.0 mpReactiveStreams-3.0
の二つのFeatureがv24.0.0.2で追加されました。
MicroProfile Reactive Messaging 3.0 では,否定応答,エミッター,バックプレッシャーのサポートなど,Libertyが従来提供していたMicroProfile Reactive Messaging 1.0からの多数の新機能と変更が導入されています。また,従来の1.0はJava EEのjavax名前空間で提供されていましたが,3.0はJakarta EE 9以降のjakarta名前空間と互換性があります。
またLibertyではMicroProfile Reactive Messagingで使用するKafkaコネクターを提供し,Kafkaを仲介してメッセージを送受信することができます。
詳細については,v24.0.0.2公開時のBlog(日本語,英語)を参照ください。
MicroProfile Telemetry 2.0対応(v24.0.0.9)
MicroProfile Telemetry 2.0 (mpTelemetry-2.0
) Featureがv24.0.0.9で追加されました。このFeatureでは,OpenTelemetryを使用して標準化された方法でログ,メトリクス,トレースを収集およびエクスポートすることで、Javaアプリケーションの可観測性を向上させます。以前のバージョンのMicroProfile Telemetryは,分散トレースのみを管理できました。
詳細については,v24.0.0.9公開時のBlog(日本語,英語)を参照ください。
MicroProfile 7.0対応(v24.0.0.12)
8月に公開されたMicroProfile 7.0に対応しました。
MicroProfile 7.0では,v24.0.0.9で対応したMicroProfile Telemetry 2.0のほか,Open API 4.0,Rest Client 4.0,Fault Tolerance 4.1の更新が含まれています。
また,(おそらくJakarta EE 11仕様の公開の遅れに対応するためですが)特定のバージョンのJakarta EE Core Profileに依存しなくなりました。MicroProfile 7.0は,Jakarta EE 10以降のCore Profileに対応するようになっています。
MicroProfile 7.0の新機能についてはOpenLiberty.ioのBlog(英語)を参照ください。
コンテナ対応の強化
InstantOn対応Featureの追加(v24.0.0.1/24.0.0.6/24.0.0.11)
Liberty InstantOnは,コンテナ環境でLibertyの起動を高速化する機能です。LinuxカーネルのCheckpoint/Restore In Userspace(CRIU)機能を使用して,起動済みのLibertyプロセスの状態をコンテナイメージ内のファイルに保存(Checkpoint)し,ファイルからプロセスを復帰(Restore)することで数十〜数百ミリ秒でのサーバーの起動を可能にします。Nativeアプリケーションにコンパイルする高速起動技術と異なり,InstantOnはJavaの全機能を利用できるという大きなメリットがあります。
InstantOnは,2023年の6月に正式版となり,現在icr.ioで公開されているOpen Libery/WebSpehre Libertyのオフィシャルイメージで利用が可能になっています。
昨年の初期のバージョンではWeb ProfileのAPIを中心とした一部のFeatureのみがInstantOn対応でしたが,今年の更新で何度か利用可能なFeatureが追加されています。
1月のv24.0.0.1では,以下のFeatureが利用可能になりました。
-
jaxws-2.2
Java Web Services 2.2 -
xmlWS-3.0
Jakarta XML Web Services 3.0 -
xmlWS-4.0
Jakarta XML Web Services 4.0 -
jdbc-4.1
Java Database Connectivity 4.1 -
jdbc-4.3
Java Database Connectivity 4.3 -
appSecurity-1.0
Application Security 1.0 -
javaMail-1.6
Java Mail 1.6 -
mail-2.0
Jakarta Mail 2.0 -
mail-2.1
Jakarta Mail 2.1 -
passwordUtilities-1.0
Password Utilities 1.0 -
localConnector-1.0
Admin Local Connector 1.0
6月のv24.0.0.6では,以下のFeatureが利用可能になりました。
-
messaging-3.0
Jakarta Messaging 3.0 -
messaging-3.1
Jakarta Messaging 3.1 -
connectors-2.0
Jakarta Connectors 2.0 -
connectors-2.1
Jakarta Connectors 2.1 -
mdb-4.0
Jakarta Enterprise Beans Message-Driven Beans
4.0 -
sessionCache-1.0
JCache Session Persistence
1.0
11月のv24.0.0.11では,以下のFeatureが利用可能になりました。
-
wasJmsClient-2.0
JMS Client for Message Server 2.0 -
messagingClient-3.0
Messaging Server Client
3.0 -
wasJmsServer-1.0
Message Server 1.0 -
messagingServer-3.0
Messaging Server
3.0 -
messagingSecurity-3.0
Messaging Server Security
3.0 -
jacc-1.5
Java Authorization Contract for Containers 1.5 -
appAuthorization-2.0
Jakarta Authorization 2.0 -
appAuthorization-2.1
Jakarta Authorization 2.1
SpringBootアプリケーションのInstantOn対応(v24.0.0.6)
Spring Bootバージョン3.2以上およびSpring Framework 6.1以上は,Coordinated Restore at Checkpoint (CRaC) サポートをふくみ,CRIUをつかった起動の高速化に対応できるようになっています。Libertyでは新たにCoordinated Restore at Checkpoint (CRaC) (crac-1.4
) Featureを提供し,Liberty InstantOnとSpring Bootを組合わせることができるようになりました。
たとえばSpring Boot 3.2を使用したアプリケーションをLiberty InstantOnで使用するには,以下のように構成します。なお,Spring Boot 3.xの実行にはJava 17以降のJDK/JREが必要です。
<features>
<feature>springBoot-3.0</feature>
<feature>servlet-6.0</feature>
<feature>crac-1.4</feature>
</features>
Spring BootのInstantOn有効化についての詳細な情報は,Liberty Blogの記事(英語)を参照ください。
コンテナイメージの追加(v24.0.0.1)
昨年9月に公開されたLTSのJava SE仕様,Java 21を使用したコンテナイメージが今年1月から追加されました。Java 21を使用したコンテナイメージは,Universal Base Image(UBI)のminimal版が使用されるようになり,使用されているJREも(JDKより)サイズをスリム化した結果,400Mバイト強と従来のイメージよりもサイズが小さくなっています。
% podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
icr.io/appcafe/websphere-liberty kernel-java8-ibmjava-ubi d9cd90e97007 35 hours ago 487 MB
icr.io/appcafe/websphere-liberty kernel-java8-openj9-ubi 2c2aa97d4152 35 hours ago 545 MB
icr.io/appcafe/websphere-liberty kernel-java11-openj9-ubi 3f826214acbe 35 hours ago 707 MB
icr.io/appcafe/websphere-liberty kernel-java17-openj9-ubi 2e316242c4a7 35 hours ago 714 MB
icr.io/appcafe/websphere-liberty kernel-java21-openj9-ubi-minimal d3066edad595 35 hours ago 406 MB
サーバー機能の更新
冗長ガーベッジコレクションのデフォルトの有効化(v24.0.0.3)
IBM SDK for Java Technology Edition version 8.x(いわゆるIBM Java 8)を使用している環境,およびIBM Semeru Runtimesを使用している環境で,冗長ガーベッジコレクションの構成をしていない場合,デフォルトで冗長ガーベッジコレクションが記録されるようになりました。
冗長ガーベッジコレクションは,OutOfMemoryErrorをはじめとしたメモリ系の問題の解析にあたって必須の資料です。かならず有効にしておくようにガイドされていましたが,デフォルトで有効になりました。一つのログファイルに1024回分のGCの情報が記録され,ローテートしながら最新10世代のファイルが保存されます。
冗長ガーベッジコレクションの構成が明示的にされている場合には,その設定内容は変更されません。また,HotSpot VMなどを使用している場合は,別途構成を追加して有効にしてください。
MicroProfile Metrics 3.0 および 4.0でのヒストグラムとタイマー メトリックの強化(v24.0.0.7)
MicroProfile Metrics 3.0 および 4.0(javax名前空間に対応したバージョン)で,取得できる情報が追加されました。この追加情報は,MicroProfile Metrics 5.1(jakarta名前空間に対応したバージョン)で取得できるようになったものがバックポートされたものです。
詳細については,v24.0.0.7公開時のBlog(日本語,英語)を参照ください。
Feature指定時のバージョンレス機能(v24.0.0.8)
Java EE仕様やJakarta EE仕様は,それぞれ多くの仕様の集合として定義されており,個々の仕様ごとに独立したバージョン番号がつけられています。原則としてLibertyでは,異なるJava EE/Jakarta EEバージョンに属する仕様を混在させることはできません。
Servlet | JSP | CDI | JAX-RS | |
---|---|---|---|---|
Java EE 7 | servlet-3.1 |
jsp-2.3 |
cdi-1.2 |
jaxrs-2.0 |
Java EE 8 | servlet-4.0 |
jsp-2.3 |
cdi-2.0 |
jaxrs-2.1 |
Jakarta EE 9.1 | servlet-5.0 |
pages-3.0 |
cdi-3.0 |
restfulWS-3.0 |
Jakarta EE 10 | servlet-6.0 |
pages-3.1 |
cdi-4.0 |
restfulWS-3.1 |
例えばJava EE 8に属するservlet-4.0
やjsp-2.3
と組合わせることができるのは,同じJava EE 8に属するcdi-2.0
やjaxrs-2.1
であり,Jakarta EE 10に属するcdi-4.0
やJava EE 7に属するjaxrs-2.0
と組み合わせることはできません。
この正しいバージョンの組み合わせを見つけるために,詳細なドキュメントの調査が毎回必要となっていたのですが,この負担を軽減するため,v24.0.0.8からバージョンレス機能をつかった構成が可能になりました。<platform>javaee-8.0</platform>
のような指定をすれば,個々の仕様ごとにバージョンを記入する必要がなくなります。
<!-- Enable features -->
<featureManager>
<platform>javaee-8.0</platform>
<feature>servlet</feature>
<feature>jsp</feature>
<feature>cdi</feature>
<feature>jaxrs</feature>
</featureManager>
また,MicroProfileについても,同様の記述が可能になります。
<!-- Enable features -->
<featureManager>
<platform>microProfile-5.0</platform>
<feature>mpHealth</feature>
<feature>mpMetrics</feature>
</featureManager>
バージョンレスFeatureについては,v24.0.0.9やv24.0.0.10でも,機能改善(バージョンを省略できるFeatureの追加)が行われています。
セキュリティ機能の更新
OpenID Connectでバックチャネル・ログアウトのサポート(v24.0.0.3)
Open LibertyのOpenID Connectクライアントとサーバーがバックチャネルログアウトに対応しました。バックチャネルログアウトは,OpenID ConnectサーバーがユーザーのログアウトをOpenID Connectクライアントに直接通知し,各OpenID Connectクライアントもローカルでユーザーをログアウトできるようにします。
詳細については,v24.0.0.3公開時のBlog(日本語,英語)を参照ください。
不要なRESTハンドラーレコードの生成を避けるためのAudit 2.0(v24.0.0.8)
v24.0.0.8からaudit-2.0
Featureが追加されました。このFeatureはaudit-1.0
と同様の監査レコードを提供しますが,RESTハンドラ・アプリケーションのレコードは生成しません。RESTハンドラ・アプリケーションを使用していないユーザー向けに提供されています。
サードパーティCookieをブロックする制限を緩和するCHIPSへの対応(v24.0.0.9)
Google Chromeなどのブラウザでは,段階的にサードパーティCookieを廃止する方針を打ち出しています。これを緩和する方法としてCHIPS(独立したパーティション状態を持つCookie)という手法が提案されています。
Libertyが利用するセッションIDやLTPA,JWTセキュリティのCookieについてCHIPS対応する手段がv24.0.0.9から提供されています。
詳細については,v24.0.0.9公開時のBlog(日本語,英語)を参照ください。
サードパーティCookieの送信を制御するSameSite属性を設定する手段の追加(v24.0.0.12)
サードパーティCookieの送信を制御するCookieヘッダーの属性として,SameSite属性が追加されています。最近のGoogle Chromeの更新で,このSameSite属性がついていない場合のデフォルトの動作が変更され,いままで送信されていたサードパーティCookieが送信されなくなるケースが出てきました。
現在のServlet APIで提供されているCookieクラスでは,SameSite属性を扱うことができないので,アプリケーションでこの属性を追加することは容易ではありません。そのため,Libertyの構成として,CookieにSameSite属性を追加する手段が提供されました。またLiberty自身が送信するセッションIDやLTPA/JWTセキュリティのCookieにもSameSite属性を設定する構成ができるようになりました。
詳細については,OpenLiberty.ioのBlog(英文)を参照してください。
WASからのSSL接続でホスト名チェックがデフォルトで有効に(v24.0.0.9)
従来型のWebSphere Application ServerやLibertyは,外部へのSSL接続する際のサーバー証明書検証において,サーバー名の検証を行っていませんでした。これは脆弱性であるとの指摘を受け,CVE番号が割り当てられました。この対応のため,デフォルトでサーバー名を検証するように修正されました。
これによりLibertyがクライアントとなり別のサーバーにSSL/TLS接続を行っている環境で,SSL/TLS接続する際に指定したホスト名が,サーバー側が使用している証明書のCN(Common Name)やSAN(Subject Alternative Name)のいずれとも一致していないと,接続に失敗するようになります。
対処方法などについては,この修正について解説したTechnical Flashを参照ください。
Libertyでは,ゼロマイグレーション・ポリシーによって原則としてデフォルト値などは変更されません。ですが,脆弱性の修正などが目的の場合は例外となります。このような変更は,たとえばWebSphere LibertyのFixpackのページではKnown Side Effectsとして紹介されています。今回の件は,3年ぶり3つめのKnown Side Effectsの追加となります。
その他の機能
配布パッケージに署名ファイル(pem)を添付(v24.0.0.1)
Open Libertyの配布パッケージに,配布アーカイブの信頼性と整合性を確認するための署名ファイル(pemファイル)が添付されるようになりました。こちらのページの手順で,ダウンロードしたパッケージを確認することができます。
ガイドの拡充
Open Libertyのサイトでは,各種シナリオにそった「実際に試せるガイド」を公開しています。このガイドにたいしても,今年は多くのコンテンツが追加されました。
- 2月の更新
- 4月の更新
- リアクティブ Java マイクロサービスの作成
- MicroProfile Reactive Messaging を使用したメッセージの確認
- RESTful サービスとリアクティブ システムの統合
- テンプレート インターフェースを使用して RESTful サービスを非同期的に利用する
- Server-Sent Events を使用してクライアントに更新をストリーミングする
- リアクティブ JAX-RS クライアントを使用した RESTful サービスの利用
- リアクティブ Java マイクロサービスのテスト
- Kubernetes Operators を使用してマイクロサービスを OpenShift 4 にデプロイする
- 8月の更新
- 11月の更新
また,7月にはcognitiveclass.aiサイトで,Open Libertyを使用したクラウドネイティブJavaアプリケーション開発の基本コースが公開されています。
まとめ:2025年に向けて
以上が,2024年に公開されたOpen Liberty/WebSphere Libertyでの新機能となります。
また2025年にも,米国時間1月28日公開予定のv25.0.0.1から12回のFixpack公開が予定されています。来年は延期されていたJakarta EE 11の公開,MicroProfile仕様のさらなる更新,次期LTSであるJava 25の公開など,大型の更新がいくつも予定されています。
これからも,Libertyは業界最速で新仕様への対応をすすめていくとともに,ゼロマイグレーション・ポリシーによって,既存のアプリケーションをより長くお使いいただけるランタイムとして,進化を続けていきます。