26.0.0.3 における UserRegistry 属性リーダーの機能強化と Jandex インデックス形式サポートの更新
このリリースでは、LDAP およびカスタム・レジストリからユーザー属性を取得するための UserRegistry 属性リーダー API が導入され、Jandex インデックス形式 11-13 のサポートが追加されてアプリケーションの起動パフォーマンスが向上しました。
Open Liberty 26.0.0.3 では:
26.0.0.3 で修正されたバグのリストをご覧ください。
以前の Open Liberty GA リリースのブログ投稿 もチェックしてください。
26.0.0.3 を使用してアプリを開発および実行する
Maven を使用している場合は、pom.xml ファイルに以下を含めます:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.12.0</version>
</plugin>
Gradle の場合は、build.gradle ファイルに以下を含めます:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.0'
}
}
apply plugin: 'liberty'
コンテナ・イメージ を使用している場合は:
FROM icr.io/appcafe/open-liberty
または、ダウンロード・ページ をご覧ください。
IntelliJ IDEA、Visual Studio Code、または Eclipse IDE を使用している場合は、オープンソースの Liberty 開発者ツール を活用して、IDE 内から効果的な開発、テスト、デバッグ、およびアプリケーション管理を行うこともできます。
UserRegistry 属性リーダーの機能強化
UserRegistry API は、LDAP およびカスタム・ユーザー・レジストリから直接、特定のユーザー属性を取得し、属性値に基づいてユーザーを検索する機能をアプリケーションに提供します。
新機能
以前は、UserRegistry API は userSecurityName による検索やワイルドカード・パターン・マッチングを使用した基本的なユーザー検索のみをサポートしていました。しかし、特定のユーザー属性を取得したり、属性値に基づいてユーザーを検索したりすることはできませんでした。これらの機能は、VMM API を通じて従来の WebSphere で利用可能でした。これら 2 つの新しい API の導入により、アプリケーションは LDAP およびカスタム・ユーザー・レジストリからユーザーを検索し、属性を取得できるようになりました。
この機能強化により、getAttributesForUser() メソッドを使用してユーザーの特定の属性を取得できるようになりました。このメソッドは、email や phoneNumber などの個別の属性の取得、または "*" を使用してユーザーの利用可能なすべての属性の取得をサポートします。
また、getUsersByAttribute() メソッドを使用して属性値に基づいてユーザーを検索することもでき、アプリケーションは特定の属性条件に一致するユーザーを見つけることができます。これらのメソッドは LDAP ユーザー・レジストリでサポートされています。カスタム・ユーザー・レジストリの実装でも、これらのメソッドを実装してサポートすることができます。
使用方法
UserRegistry.java に追加された新しい API メソッド:
-
default Map<String, Object> getAttributesForUser(String userSecurityName, Set<String> attributeNames)説明: LDAP ユーザー・レジストリで構成されている、指定された
userSecurityNameのattributesNamesとそれに対応する値を含む Map<String, Object> を返します。UserRegistry ur = RegistryHelper.getUserRegistry("realmName"); // 有効な ldap 属性名 Set<String> attributeNames = Set.of("telephoneNumber", "uid", "mail"); // またはすべての属性を取得するには "*" Map<String, Object> result = ur.getAttributesForUser("testuser", attributeNames); // trace.log の出力 > getAttributesForUser Entry testuser [telephoneNumber, uid, mail] < getAttributesForUser Exit {uid=testuser, mail=testuser@example.com, telephoneNumber=<telephone-number>} -
default SearchResult getUsersByAttribute(String attributeName, String value, int limit)説明: LDAP ユーザー・レジストリで構成されている、指定された
valueを持つattributeNameに一致するユーザーのリストを含むSearchResultオブジェクトを返します。UserRegistry ur = RegistryHelper.getUserRegistry("realmName"); SearchResult searchResult = ur.getUsersByAttribute("email", "[email protected]", 1); // trace.log の出力 > getUsersByAttribute Entry email testuser@example.com 1 < getUsersByAttribute Exit SearchResult hasMore=false [testuser]
ユーザー・レジストリの詳細については、以下のリソースを参照してください:
Jandex インデックス形式サポートの更新
Open Liberty は最新の Jandex インデックス形式をサポートするようになり、Jandex バージョン 3.1.0 以降で作成された Jandex インデックスを使用できるようになりました。Jandex は、メモリ効率優れた Java アノテーション・インデクサーおよびオフライン・リフレクション・ライブラリで、クラス・メタデータを事前にインデックス化することでアプリケーションの起動パフォーマンスを向上させます。
この機能は、Jakarta EE および MicroProfile アプリケーションを扱うアプリケーション開発者および DevOps エンジニアを対象としています。アプリケーションの起動時間を最適化し、ランタイム・コストを削減するように設計されています。
新機能
この更新により、Open Liberty は Jandex インデックス形式 11、12、および 13 をサポートします。Jandex バージョン 3.1.0 から現在の最新バージョン 3.5.3 までは、これらの形式を使用するインデックスを生成します。
以前まで、Open Liberty は Jandex インデックス形式バージョン 10 までしかサポートしていませんでした。このインデックス形式の制限により、Jandex インデックスでパッケージ化されたアプリケーションは、期待されるパフォーマンス向上を維持しながらバージョン 10 を超えるインデックス形式を使用することができませんでした。これらのパフォーマンス上の利点を維持するために、ビルド・ツールは 3.1.0 より前の Jandex バージョンを使用し続けるか、バージョン 10 までのインデックス形式を使用するインデックスを生成するように Jandex インデックス生成を明示的に構成する必要がありました。
メリット
Jandex インデックス形式のサポート追加には、いくつかのメリットがあります:
-
互換性の向上: 新しい Jandex バージョンを使用する最新のビルド・ツールおよびフレームワークとシームレスに連携
-
起動時間の短縮: バージョンの制約なしに Jandex の効率的なアノテーション・インデックス化の恩恵を受け続けることができる
-
メンテナンスの削減: 複数の Jandex バージョンを維持したり、互換性のためにインデックスを再生成したりする必要がない
-
将来性: Jandex エコシステムの進化に合わせて最新の状態を維持
制限事項
Jandex インデックスを使用する場合は、インデックス・ファイルがアプリケーション・クラスと最新の状態に保たれていることを確認してください。 Jandex インデックスがアプリケーション・クラスと同期していない場合、不正なアノテーション・データが含まれる可能性があり、アプリケーションが正しく機能しなくなる可能性があります。古い Jandex インデックスを確実に検出することはできません。
Open Liberty は、インデックス形式 13 より高いインデックス形式を読み取りません。新しいバージョンの Jandex がより高いインデックス形式バージョンを追加した場合、Open Liberty はより高いインデックス形式バージョンを使用する Jandex インデックスを読み取る前に更新が必要です。
外部ソースから取得される Open Liberty フィーチャー mpGraphQL は、インデックス形式 10 以下の Jandex インデックス形式の読み取りに制限されています。フィーチャー mpGraphQL を使用する場合、Jandex インデックスはインデックス形式 10 を使用して生成する必要があります。この制限は、現在の最新バージョン mpGraphQL-2.0 を含む、mpGraphQL のすべての現行バージョンに適用されます。
制限の緩和
以前は、Jandex の使用が有効になっており、アプリケーションに形式 11 から 13 を使用する Jandex インデックスが含まれている場合、Open Liberty はエラー・メッセージを表示し、それらのインデックスを無視していました。このような場合、アノテーション・スキャンは Liberty の内部アノテーション・スキャン・メカニズムを使用して実行されていました。
Jandex インデックス形式 11 から 13 のサポートが追加されたことで、Open Liberty はこれらの形式で生成されたインデックスを使用するようになりました。これらのインデックスは、アプリケーション・クラスと最新の状態に保つ必要があります。アプリケーションでパッケージ化された Jandex インデックスが現在のアプリケーション・クラスを正確に反映していることを確認してください。
使用方法
新しい Jandex インデックス形式のサポートを有効にするために、server.xml ファイルで構成を変更する必要はありません。Open Liberty は Jandex インデックス形式を自動的に検出し、その形式に適したインデックス・リーダーを選択します。形式 11、12、および 13 を使用するインデックスを読み取り、バージョン 10 までの形式を使用するインデックスも引き続きサポートします。
デフォルトでは、Jandex の使用は無効になっています。Jandex を有効にするには、application 要素または applicationManager 要素のいずれかで useJandex プロパティを true に設定します。
ビルド・プロセスの一部として Jandex インデックスを生成している場合、最新の Jandex Maven プラグインまたは Gradle プラグインのバージョンを使用できるようになりました:
Maven の例:
<plugin>
<groupId>io.smallrye</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>3.5.3</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
Gradle の例:
plugins {
id 'org.kordamp.gradle.jandex' version '2.3.0'
}
Open Liberty は、サポートされているインデックス形式バージョンに対して、生成された META-INF/jandex.idx ファイルを自動的に検出して認識します。
詳細については、Jandex ドキュメント を参照してください。
このリリースで修正された注目すべきバグ
いくつかのバグを修正しました。以下のセクションでは、このリリースで解決された問題のいくつかについて説明します。興味がある場合は、26.0.0.3 で修正されたバグの完全なリスト をご覧ください。
Open Liberty 26.0.0.3 を今すぐ入手
Maven、Gradle、Docker、およびダウンロード可能なアーカイブ から入手できます。