From f6f6223d7dc43e428e74f116ba7461e16827a59b Mon Sep 17 00:00:00 2001 From: Hiroko Takamiya Date: Fri, 8 May 2026 10:37:38 -0400 Subject: [PATCH 01/14] Japanese blog 26.0.0.4 --- posts/2026-04-21-26.0.0.4.adoc | 3 + posts/ja/2026-04-21-26.0.0.4.adoc | 344 ++++++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100755 posts/ja/2026-04-21-26.0.0.4.adoc diff --git a/posts/2026-04-21-26.0.0.4.adoc b/posts/2026-04-21-26.0.0.4.adoc index 81651858b3..36a0185d3f 100644 --- a/posts/2026-04-21-26.0.0.4.adoc +++ b/posts/2026-04-21-26.0.0.4.adoc @@ -10,6 +10,9 @@ seo-description: This release introduces support for selecting JWT signature alg blog_description: This release introduces support for selecting JWT signature algorithms from JOSE headers and adds Java 26 support. It also removes the default LTPA keys password for enhanced security, and includes file transfer restrictions and security vulnerability fixes. open-graph-image: https://openliberty.io/img/twitter_card.jpg open-graph-image-alt: Open Liberty Logo +blog-available-in-languages: +- lang: ja + path: /ja/blog/2026/04/21/26.0.0.4.html --- = Enhanced JWT validation, Java 26 support, and more in 26.0.0.4 Navaneeth S Nair diff --git a/posts/ja/2026-04-21-26.0.0.4.adoc b/posts/ja/2026-04-21-26.0.0.4.adoc new file mode 100755 index 0000000000..69aba838a4 --- /dev/null +++ b/posts/ja/2026-04-21-26.0.0.4.adoc @@ -0,0 +1,344 @@ +--- +layout: post +title: "26.0.0.4でJWT検証の強化、Java 26サポートなど" +# Do NOT change the categories section +categories: blog +author_picture: https://avatars3.githubusercontent.com/navaneethsnair1 +author_github: https://github.com/navaneethsnair1 +seo-title: JWT検証の強化、Java 26サポートなど 26.0.0.4 - OpenLiberty.io +seo-description: このリリースでは、JOSEヘッダーからJWT署名アルゴリズムを選択するサポートを導入し、Java 26のサポートを追加しました。また、セキュリティ強化のためデフォルトのLTPA鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 +blog_description: このリリースでは、JOSEヘッダーからJWT署名アルゴリズムを選択するサポートを導入し、Java 26のサポートを追加しました。また、セキュリティ強化のためデフォルトのLTPA鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 +open-graph-image: https://openliberty.io/img/twitter_card.jpg +open-graph-image-alt: Open Liberty Logo +additional_authors: +- name: 日本IBM (校正) + github: hhttps://github.com/octocat + image: https://avatars.githubusercontent.com/u/583231 +blog-available-in-languages: +- lang: en + path: /blog/2026/04/21/26.0.0.4.html +--- += JWT検証の強化、Java 26サポートなど 26.0.0.4 +Navaneeth S Nair +:imagesdir: / +:url-prefix: +:url-about: / +//Blank line here is necessary before starting the body of the post. + +このリリースでは、JOSEヘッダーからJWT署名アルゴリズムを選択するサポートを導入し、Java 26のサポートを追加しました。また、セキュリティ強化のためデフォルトのLTPA鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 + +link:{url-about}[Open Liberty] 26.0.0.4の内容: + +* <> +* <> +* <> +* <> +* <> +* <> + + +// // // // // // // // +// In the preceding section: +// Replace the TAG_X with a short label for the feature in lower-case, eg: mp3 +// Replace the FEATURE_1_HEADING with heading the feature section, eg: MicroProfile 3.3 +// Where the updates are grouped as sub-headings under a single heading +// (eg all the features in a MicroProfile release), provide sub-entries in the list; +// eg replace SUB_TAG_1 with mpr, and SUB_FEATURE_1_HEADING with +// Easily determine HTTP headers on outgoing requests (MicroProfile Rest Client 1.4) +// // // // // // // // + +修正されたバグの一覧は、link:https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A26004+label%3A%22release+bug%22[26.0.0.4のリリースノート]で確認できます。 + +その他の情報は、link:{url-prefix}/blog/?search=release&search!=beta[過去のOpen Liberty GAリリースブログ記事]をチェックしてください。 + + +[#run] + +// // // // // // // // +// LINKS +// +// OpenLiberty.io site links: +// link:{url-prefix}/guides/maven-intro.html[Maven] +// +// Off-site links: +//link:https://openapi-generator.tech/docs/installation#jar[Download Instructions] +// +// IMAGES +// +// Place images in ./img/blog/ +// Use the syntax: +// image::/img/blog/log4j-rhocp-diagrams/current-problem.png[Logging problem diagram,width=70%,align="center"] +// // // // // // // // + +== 26.0.0.4を使いアプリを開発・実行するには + +link:{url-prefix}/guides/maven-intro.html[Maven]を使っている場合は、`pom.xml`に以下を含めてください: + +[source,xml] +---- + + io.openliberty.tools + liberty-maven-plugin + 3.12.0 + +---- + +link:{url-prefix}/guides/gradle-intro.html[Gradle]を使っている場合は、`build.gradle`に以下のように含めてください: + +[source,gradle] +---- +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.0' + } +} +apply plugin: 'liberty' +---- +// // // // // // // // +// In the preceding section: +// Replace the Maven `3.11.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-maven-plugin +// Replace the Gradle `3.9.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-gradle-plugin +// TODO: Update GHA to automatically do the above. If the maven.org is problematic, then could fallback to using the GH Releases for the plugins +// // // // // // // // + +さらに、link:{url-prefix}/docs/latest/container-images.html[コンテナイメージ]を使う場合はこちら: + +[source] +---- +FROM icr.io/appcafe/open-liberty +---- + +あるいは、link:{url-prefix}/start/[ダウンロードページ]をご覧ください。 + +link:https://plugins.jetbrains.com/plugin/14856-liberty-tools[IntelliJ IDEA]、link:https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext[Visual Studio Code]、link:https://marketplace.eclipse.org/content/liberty-tools[Eclipse IDE]に対しても、link:https://openliberty.io/docs/latest/develop-liberty-tools.html[Open Libertyの開発者ツール]を使ってIDE内からの開発・テスト・デバッグ・アプリ管理が可能です。 + +[link=https://stackoverflow.com/tags/open-liberty] +image::img/blog/blog_btn_stack_ja.svg[Stack Overflowで質問する, align="center"] + +[#file_transfer] +=== 26.0.0.4のファイル転送の変更 +`restConnector-2.0`機能によって提供されるLibertyのFileService MBeanに、新たに`blocklist`属性が追加されました。この属性は`server.xml`ファイ内の``設定要素で構成されます。この属性のデフォルト値は`${server.output.dir}/resources/security`です。この動作変更により、セキュリティ脆弱性link:https://github.com/advisories/GHSA-c39w-6qgm-5cp7[CVE-2025-14915]が解決され、デフォルトのFileTransferアクセスが`${server.output.dir}/resources/security`に制限されます。 + +`${server.output.dir}/resources/security`へのFileTransferアクセスが必要な場合は、空のblocklistを設定することで元の動作を復元できます。 + +詳細については、link:https://www.ibm.com/docs/en/was-liberty/nd?topic=manually-file-transfer[ドキュメント]を参照してください。 + +[#ltpa] +== デフォルトLTPA鍵パスワードの削除 + +セキュリティ脆弱性link:https://www.ibm.com/support/pages/node/7266845[CVE-2025-14917]を解決するため、デフォルトのLTPA鍵パスワードが削除されました。 + +以前は、``要素で`keysPassword`属性が定義されていない場合、LTPA鍵のデフォルトパスワードが使用されていました。この変更により、デフォルトパスワードはサポートされなくなりました。 + +既存のサーバーで、LTPA鍵パスワードが`server.xml`ファイルで設定されていない場合、`server.env`ファイルの`keystore_password`が使用されます。この値は`ltpa.keys`ファイル内のLTPA鍵を再暗号化します。LTPA鍵自体は影響を受けません。`keystore_password`は、`server create`コマンドで`--no-password`オプションを使用しない限り、サーバー作成時に`server.env`ファイルに設定されます。 + +`server.xml`ファイルの``要素で`keysPassword`が定義されておらず、`server.env`ファイルで`keystore_password`が定義されていない場合、LTPAサービスは失敗します。 +次のエラーメッセージが表示されます: + +[source,text] +---- +CWWKS4118E: LTPA configuration error. A keysPassword attribute is not configured on the element, the 'ltpa_keys_password' environment variable is not set, and the 'keystore_password' environment variable is not set. +---- + +LTPA鍵パスワードが設定されていることを確認するには、次の手順を実行してください: + +. `server.xml`ファイルの``要素に`keysPassword`属性が提供されているかどうかを確認します(例:``)。 +* 提供されている場合、この更新は影響せず、それ以上のアクションは必要ありません。 +* 提供されていない場合は、追加*しないで*次のステップに進んでください。 +. `server.env`ファイルに`keystore_password`環境変数が存在するかどうかを確認します(例:`keystore_password=myKeystorePassword`)。 +* 存在する場合、サーバー起動時に`keystore_password`を使用して、以前デフォルトの`keysPassword`で暗号化されていたLTPA鍵を再暗号化します。 +* 存在しない場合は、次のステップに進んでください。 +. `server.env`ファイルに次の環境変数を追加します(新しいサーバー用の次のセクションで説明する`ltpa_keys_password`では*なく*、ここでは`keystore_password`を使用してください): ++ +[source,properties] +---- +keystore_password=your-desired-password +---- ++ +* サーバー起動時に`keystore_password`を使用して、以前デフォルトの`keysPassword`で暗号化されていたLTPA鍵を再暗号化します。 + +新しいサーバーの場合、サーバー作成時に新しい`ltpa_keys_password`がランダムに生成されます。これは、`server create`コマンドで`--no-password`オプションが指定されない限り、`server.env`ファイルに保存されます。``要素で`keysPassword`属性が定義されていない場合、ランダムに生成された`ltpa_keys_password`が使用されます。 + +詳細については、link:https://openliberty.io/docs/latest/reference/config/ltpa.html[LTPA]設定要素を参照してください。 + + +[#jwt] +== JOSEヘッダーからのJWT署名および復号化アルゴリズムの選択サポート + +JSON Web Token(JWT)は、さまざまな暗号署名アルゴリズムを使用して署名できます。このリリースでは、JWT Consumer、MicroProfile JWT、OpenID Connect Client、Social Media Login機能が、JOSEヘッダーからJWT署名アルゴリズムを選択することをサポートします。このサポートにより、トークンヘッダーに基づいて異なる署名アルゴリズムを使用できるようになります。 + +以前は、`server.xml`ファイルの各設定に対して、1つの署名アルゴリズム(例:`RS256`)のみを設定できました。受信したJWTが異なるアルゴリズムで署名されている場合、検証は失敗していました。この更新により、JWT ヘッダーの署名アルゴリズムを検証に使用できるようになります。これにより、単一の設定内で異なる署名アルゴリズムを使用する柔軟性が提供されます。 + +=== 使用方法 + +ヘッダーからの署名アルゴリズム選択を有効にするには、`signatureAlgorithm`属性を`FROM_HEADER`に設定し、オプションで`allowedSignatureAlgorithms`属性を設定して許可するアルゴリズムを指定します。 + +`allowedSignatureAlgorithms`が設定されていない場合、デフォルトリストにはOpen Libertyがサポートするすべての署名アルゴリズムが含まれます:`RS256、RS384、RS512、HS256、HS384、HS512、ES256、ES384`、および`ES512`。 + +非対称アルゴリズムとトラストストア設定で`FROM_HEADER`を使用する場合、公開鍵には対応するアルゴリズムのプレフィックスを付ける必要があります(例:`RS256_keyalias`)。検証中、サーバーはJWTのヘッダーで指定されたアルゴリズムで始まるエイリアスをトラストストアで検索します。アルゴリズムのプレフィックスが付いたエイリアスが見つからない場合、クライアントは`trustedAlias`属性(`jwtConsumer`の場合)または`trustAliasName`属性(`openidConnectClient`、`oidcLogin`、`mpJwt`の場合)で指定されたエイリアスの使用にフォールバックします(設定されている場合)。 + +サポートされている要素にこれらの設定を適用する方法の例については、次の`server.xml`ファイル設定を参照してください: + +[source,xml] +---- + + + + + + + +---- + +=== 詳細情報 + +*サーバー設定:* + +* link:https://openliberty.io/docs/latest/reference/config/openidConnectClient.html[openidConnectClient] +* link:https://openliberty.io/docs/latest/reference/config/jwtConsumer.html[jwtConsumer] +* link:https://openliberty.io/docs/latest/reference/config/mpJwt.html[mpJwt] +* link:https://openliberty.io/docs/latest/reference/config/oidcLogin.html[oidcLogin] + +*ドキュメント:* + +* link:https://openliberty.io/docs/latest/reference/feature/openidConnectClient-1.0.html[OpenID Connect Client 1.0] +* link:https://openliberty.io/docs/latest/reference/feature/jwt-1.0.html[JSON Web Token 1.0] +* link:https://openliberty.io/docs/latest/reference/feature/mpJwt-2.1.html[MicroProfile JWT 2.1] +* link:https://openliberty.io/docs/latest/reference/feature/socialLogin-1.0.html[Social Media Login 1.0] + +[#java_26] +=== Java 26のサポート +Java 26は、以前のバージョンに比べて新機能と拡張機能を導入した最新のJavaリリースです。このリリースは長期サポート(LTS)リリースではありません。 + +link:https://openjdk.org/projects/jdk/26/[Java 26]には10の新機能(JEP)があります。5つはテスト機能で、5つは完全に提供されています。 + +*テスト機能:* + +* 524: link:https://openjdk.org/jeps/524[PEM Encodings of Cryptographic Objects (Second Preview)] +* 525: link:https://openjdk.org/jeps/525[Structured Concurrency (Sixth Preview)] +* 526: link:https://openjdk.org/jeps/526[Lazy Constants (Second Preview)] +* 529: link:https://openjdk.org/jeps/529[Vector API (Eleventh Incubator)] +* 530: link:https://openjdk.org/jeps/530[Primitive Types in Patterns, instanceof, and switch (Fourth Preview)] + +*提供された機能:* + +* 500: link:https://openjdk.org/jeps/500[Prepare to Make Final Mean Final] +* 504: link:https://openjdk.org/jeps/504[Remove the Applet API] +* 516: link:https://openjdk.org/jeps/516[Ahead-of-Time Object Caching with Any GC] +* 517: link:https://openjdk.org/jeps/517[HTTP/3 for the HTTP Client API] +* 522: link:https://openjdk.org/jeps/522[G1 GC: Improve Throughput by Reducing Synchronization] + +Java 26の新しい変更JEP 500(「Prepare to Make Final Mean Final」)は、深いリフレクションを使用する際にfinalフィールドの変更を制限することで、finalフィールドの真の不変性の強制を開始します。 +Java 26では、このような変更は引き続き機能しますが、デフォルトでランタイム警告をトリガーし、開発者がより厳格な強制に備えることができます。 +将来のリリースでは、例外をスローする可能性が高く、finalを真に不変にします。 + +開発者は、JVMフラグ(例:`--illegal-final-field-mutation=deny`)を使用して、この厳格な動作を早期に選択し、問題を早期に検出できます。 +この変更により、プログラムの正確性、セキュリティ、およびJVM最適化が向上します。 + +今すぐこれらの変更を活用して、アプリケーションとマイクロサービスがJava 26でどのように動作するかを評価する時間を増やしてください。 + +link:https://developer.ibm.com/languages/java/semeru-runtimes/downloads/[IBM Semeru Runtime 26]またはlink:https://adoptium.net/temurin/releases/?version=26[Temurin 26]の最新リリースをダウンロードし、Open Liberty link:{url-prefix}/start/#runtime_releases[26.0.0.4]をダウンロードしてインストールすることで、今日から始めることができます。Libertyサーバーのlink:{url-prefix}/docs/latest/reference/config/server-configuration-overview.html#server-env[server.env]ファイルを更新し、`JAVA_HOME`をJava 26インストールディレクトリに設定してテストを開始してください。 + +Java 26の詳細については、Java 26のlink:https://jdk.java.net/26/release-notes[リリースノートページ]およびlink:https://docs.oracle.com/en/java/javase/26/docs/api/index.html[API Javadocページ]を参照してください。 + + +// // // // DO NOT MODIFY THIS COMMENT BLOCK // // // // +// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/33622 +// Contact/Reviewer: ncpibm +// // // // // // // // +[#displayCustomizedExceptionText] +== displayCustomizedExceptionTextプロパティ +このリリースでは、`displayCustomizedExceptionText`設定のドキュメントとテストが追加されました。これにより、ユーザーはLibertyのデフォルトエラーメッセージ(SRVE0218E: ForbiddenやSRVE0232E: An exception occurredなど)を、より明確なユーザー定義メッセージでオーバーライドできます。 + +この機能は、シンプルな`server.xml`ファイル設定を通じて有効化され、カスタムメッセージを特定のHTTPステータスコード(`403`および`500`)にマッピングできます。 + +テストにより、これらのカスタムメッセージがサポートされているすべてのプラットフォームでLibertyのデフォルトを正しく置き換えることが確認され、設定されたテキストがすべてのシナリオで一貫して返されることが確認されます。 + +[source,xml] +---- + +---- + +// DO NOT MODIFY THIS LINE. + +// // // // // // // // +// In the preceding section: +// Replace TAG_X/SUB_TAG_X with the given tag of your secton from the contents list +// Replace SUB_FEATURE_TITLE/FEATURE_X_TITLE with the given title from the contents list +// Replace FEATURE with the feature name for the server.xml file e.g. mpHealth-1.4 +// Replace LINK with the link for extra information given for the feature +// Replace LINK_DESCRIPTION with a readable description of the information +// // // // // // // // + +[#CVEs] +== このリリースでのセキュリティ脆弱性(CVE)修正 +[cols="5*"] +|=== +|CVE |CVSSスコア |脆弱性内容 |影響を受けるバージョン |備考 + +|https://www.cve.org/CVERecord?id=CVE-2025-14915[CVE-2025-14915] +|6.5 +|権限昇格 +|17.0.0.3-26.0.0.3 +|`restConnector-2.0`機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2025-14917[CVE-2025-14917] +|6.7 +|セキュリティの弱体化 +|17.0.0.3-26.0.0.3 +|`appSecurity-1.0`、`appSecurity-2.0`、`appSecurity-3.0`、`appSecurity-4.0`、`appSecurity-5.0`機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2026-1561[CVE-2026-1561] +|5.4 +|サーバーサイドリクエストフォージェリ +|17.0.0.3-26.0.0.3 +|`samlWeb-2.0`機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2026-29063[CVE-2026-29063] +|8.7 +|プロトタイプ汚染 +|17.0.0.3-26.0.0.3 +|`openapi-3.1`、`mpOpenAPI-1.0`、`mpOpenAPI-1.1`、`mpOpenAPI-2.0`、`mpOpenAPI-3.0`、`mpOpenAPI-3.1`、`mpOpenAPI-4.0`、`mpOpenAPI-4.1`機能に影響 + +|=== +// +// If there are no CVEs fixed in this release, replace the table with: +// "There are no security vulnerability fixes in Open Liberty [26.0.0.4]." +// // // // // // // // +過去の脆弱性修正の一覧については、Open Libertyのlink:{url-prefix}/docs/latest/security-vulnerabilities.html[セキュリティ脆弱性(CVE)のリスト]を参照してください。 + + +// // // // // // // // +// In the preceding section: +// For this section ask either Michal Broz or Tom Evans or the #openliberty-release-blog channel for Notable bug fixes in this release. +// Present them as a list in the order as provided, linking to the issue and providing a short description of the bug and the resolution. +// If the issue on Github is missing any information, leave a comment in the issue along the lines of: +// "@[issue_owner(s)] please update the description of this `release bug` using the [bug report template](https://github.com/OpenLiberty/open-liberty/issues/new?assignees=&labels=release+bug&template=bug_report.md&title=)" +// Feel free to message the owner(s) directly as well, especially if no action has been taken by them. +// For inspiration about how to write this section look at previous blogs e.g- 20.0.0.10 or 21.0.0.12 (https://openliberty.io/blog/2021/11/26/jakarta-ee-9.1.html#bugs) +// // // // // // // // + + + +== Open Liberty 26.0.0.4を今すぐ入手 + +このバージョンは<>からダウンロード可能です。 \ No newline at end of file From b8bf4c23b9a91ca9b297af10e7e3ce77187ed10f Mon Sep 17 00:00:00 2001 From: Hiroko Takamiya Date: Tue, 19 May 2026 13:01:49 -0400 Subject: [PATCH 02/14] Japanese blog initial translation by Bob reviewed by Midorikawa-san --- posts/2026-04-21-26.0.0.4.adoc | 3 + posts/ja/2026-04-21-26.0.0.4.adoc | 344 ++++++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100755 posts/ja/2026-04-21-26.0.0.4.adoc diff --git a/posts/2026-04-21-26.0.0.4.adoc b/posts/2026-04-21-26.0.0.4.adoc index 81651858b3..36a0185d3f 100644 --- a/posts/2026-04-21-26.0.0.4.adoc +++ b/posts/2026-04-21-26.0.0.4.adoc @@ -10,6 +10,9 @@ seo-description: This release introduces support for selecting JWT signature alg blog_description: This release introduces support for selecting JWT signature algorithms from JOSE headers and adds Java 26 support. It also removes the default LTPA keys password for enhanced security, and includes file transfer restrictions and security vulnerability fixes. open-graph-image: https://openliberty.io/img/twitter_card.jpg open-graph-image-alt: Open Liberty Logo +blog-available-in-languages: +- lang: ja + path: /ja/blog/2026/04/21/26.0.0.4.html --- = Enhanced JWT validation, Java 26 support, and more in 26.0.0.4 Navaneeth S Nair diff --git a/posts/ja/2026-04-21-26.0.0.4.adoc b/posts/ja/2026-04-21-26.0.0.4.adoc new file mode 100755 index 0000000000..31ddd8320a --- /dev/null +++ b/posts/ja/2026-04-21-26.0.0.4.adoc @@ -0,0 +1,344 @@ +--- +layout: post +title: " 26.0.0.4 でJWT検証の強化、Java 26サポートなど" +# Do NOT change the categories section +categories: blog +author_picture: https://avatars3.githubusercontent.com/navaneethsnair1 +author_github: https://github.com/navaneethsnair1 +seo-title: JWT検証の強化、Java 26サポートなど 26.0.0.4 - OpenLiberty.io +seo-description: このリリースでは、JOSE ヘッダーから JWT 署名アルゴリズムを選択するサポートを導入し、Java 26 のサポートを追加しました。また、セキュリティ強化のためデフォルトの LTPA 鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 +blog_description: このリリースでは、JOSE ヘッダーから JWT 署名アルゴリズムを選択するサポートを導入し、Java 26 のサポートを追加しました。また、セキュリティ強化のためデフォルトの LTPA 鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 +open-graph-image: https://openliberty.io/img/twitter_card.jpg +open-graph-image-alt: Open Liberty Logo +additional_authors: +- name: 緑川 諒 (校正) + github: https://github.com/ryo-midorikawa-01 + image: https://avatars.githubusercontent.com/ryo-midorikawa-01 +blog-available-in-languages: +- lang: en + path: /blog/2026/04/21/26.0.0.4.html +--- += JWT 検証の強化、Java 26 サポートなど 26.0.0.4 +Navaneeth S Nair +:imagesdir: / +:url-prefix: +:url-about: / +//Blank line here is necessary before starting the body of the post. + +このリリースでは、JOSE ヘッダーから JWT 署名アルゴリズムを選択するサポートを導入し、Java 26 のサポートを追加しました。また、セキュリティ強化のためデフォルトの LTPA 鍵パスワードを削除し、ファイル転送の制限とセキュリティ脆弱性の修正が含まれています。 + +link:{url-about}[Open Liberty] 26.0.0.4 の内容: + +* <> +* <> +* <> +* <> +* <> +* <> + + +// // // // // // // // +// In the preceding section: +// Replace the TAG_X with a short label for the feature in lower-case, eg: mp3 +// Replace the FEATURE_1_HEADING with heading the feature section, eg: MicroProfile 3.3 +// Where the updates are grouped as sub-headings under a single heading +// (eg all the features in a MicroProfile release), provide sub-entries in the list; +// eg replace SUB_TAG_1 with mpr, and SUB_FEATURE_1_HEADING with +// Easily determine HTTP headers on outgoing requests (MicroProfile Rest Client 1.4) +// // // // // // // // + +修正されたバグの一覧は、link:https://github.com/OpenLiberty/open-liberty/issues?q=label%3Arelease%3A26004+label%3A%22release+bug%22[26.0.0.4 のリリースノート]で確認できます。 + +その他の情報は、link:{url-prefix}/blog/?search=release&search!=beta[過去の Open Liberty GA リリースブログ記事]をチェックしてください。 + + +[#run] + +// // // // // // // // +// LINKS +// +// OpenLiberty.io site links: +// link:{url-prefix}/guides/maven-intro.html[Maven] +// +// Off-site links: +//link:https://openapi-generator.tech/docs/installation#jar[Download Instructions] +// +// IMAGES +// +// Place images in ./img/blog/ +// Use the syntax: +// image::/img/blog/log4j-rhocp-diagrams/current-problem.png[Logging problem diagram,width=70%,align="center"] +// // // // // // // // + +== 26.0.0.4 を使いアプリを開発・実行するには + +link:{url-prefix}/guides/maven-intro.html[Maven]を使っている場合は、`pom.xml`に以下を含めてください: + +[source,xml] +---- + + io.openliberty.tools + liberty-maven-plugin + 3.12.0 + +---- + +link:{url-prefix}/guides/gradle-intro.html[Gradle]を使っている場合は、`build.gradle`に以下のように含めてください: + +[source,gradle] +---- +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.0' + } +} +apply plugin: 'liberty' +---- +// // // // // // // // +// In the preceding section: +// Replace the Maven `3.11.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-maven-plugin +// Replace the Gradle `3.9.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-gradle-plugin +// TODO: Update GHA to automatically do the above. If the maven.org is problematic, then could fallback to using the GH Releases for the plugins +// // // // // // // // + +さらに、link:{url-prefix}/docs/latest/container-images.html[コンテナイメージ]を使う場合はこちら: + +[source] +---- +FROM icr.io/appcafe/open-liberty +---- + +あるいは、link:{url-prefix}/start/[ダウンロードページ]をご覧ください。 + +link:https://plugins.jetbrains.com/plugin/14856-liberty-tools[IntelliJ IDEA]、link:https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext[Visual Studio Code]、link:https://marketplace.eclipse.org/content/liberty-tools[Eclipse IDE] に対しても、link:https://openliberty.io/docs/latest/develop-liberty-tools.html[Open Liberty の開発者ツール]を使って IDE 内からの開発・テスト・デバッグ・アプリ管理が可能です。 + +[link=https://stackoverflow.com/tags/open-liberty] +image::img/blog/blog_btn_stack_ja.svg[Stack Overflow で質問する, align="center"] + +[#file_transfer] +=== 26.0.0.4 のファイル転送の変更 +`restConnector-2.0` 機能によって提供される Liberty の FileService MBean に、新たに `blocklist` 属性が追加されました。この属性は `server.xml` ファイル内の `` 設定要素で構成されます。この属性のデフォルト値は `${server.output.dir}/resources/security` です。この動作変更により、セキュリティ脆弱性 link:https://github.com/advisories/GHSA-c39w-6qgm-5cp7[CVE-2025-14915] が解決され、デフォルトの FileTransfer アクセスが `${server.output.dir}/resources/security` に制限されます。 + +`${server.output.dir}/resources/security` への FileTransfer アクセスが必要な場合は、空のブロックリストを設定することで元の動作を復元できます。 + +詳細については、link:https://www.ibm.com/docs/en/was-liberty/nd?topic=manually-file-transfer[ドキュメント]を参照してください。 + +[#ltpa] +== デフォルト LTPA 鍵パスワードの削除 + +セキュリティ脆弱性 link:https://www.ibm.com/support/pages/node/7266845[CVE-2025-14917] を解決するため、デフォルトの LTPA 鍵パスワードが削除されました。 + +以前は、`` 要素で `keysPassword` 属性が定義されていない場合、LTPA 鍵のデフォルトパスワードが使用されていました。この変更により、デフォルトパスワードはサポートされなくなりました。 + +既存のサーバーで、LTPA 鍵パスワードが `server.xml` ファイルで設定されていない場合、`server.env` ファイルの `keystore_password` が使用されます。この値は `ltpa.keys` ファイル内の LTPA 鍵を再暗号化します。LTPA 鍵自体は影響を受けません。`keystore_password` は、`server create` コマンドで `--no-password` オプションを使用しない限り、サーバー作成時に `server.env` ファイルに設定されます。 + +`server.xml` ファイルの `` 要素で `keysPassword` が定義されておらず、`server.env` ファイルで `keystore_password` が定義されていない場合、LTPA サービスは失敗します。 +次のエラーメッセージが表示されます: + +[source,text] +---- +CWWKS4118E: LTPA configuration error. A keysPassword attribute is not configured on the element, the 'ltpa_keys_password' environment variable is not set, and the 'keystore_password' environment variable is not set. +---- + +LTPA 鍵パスワードが設定されていることを確認するには、次の手順を実行してください: + +. `server.xml` ファイルの `` 要素に `keysPassword` 属性が提供されているかどうかを確認します(例:``)。 +* 提供されている場合、この更新は影響せず、それ以上のアクションは必要ありません。 +* 提供されていない場合は、追加*しないで*次のステップに進んでください。 +. `server.env` ファイルに `keystore_password` 環境変数が存在するかどうかを確認します(例:`keystore_password=myKeystorePassword`)。 +* 存在する場合、サーバー起動時に `keystore_password` を使用して、以前デフォルトの `keysPassword` で暗号化されていた LTPA 鍵を再暗号化します。 +* 存在しない場合は、次のステップに進んでください。 +. `server.env` ファイルに次の環境変数を追加します(新しいサーバー用の次のセクションで説明する `ltpa_keys_password` では*なく*、ここでは `keystore_password` を使用してください): ++ +[source,properties] +---- +keystore_password=your-desired-password +---- ++ +* サーバー起動時に `keystore_password` を使用して、以前デフォルトの `keysPassword` で暗号化されていた LTPA 鍵を再暗号化します。 + +新しいサーバーの場合、サーバー作成時に新しい `ltpa_keys_password` がランダムに生成されます。これは、`server create` コマンドで `--no-password` オプションが指定されない限り、`server.env` ファイルに保存されます。`` 要素で `keysPassword` 属性が定義されていない場合、ランダムに生成された `ltpa_keys_password` が使用されます。 + +詳細については、link:https://openliberty.io/docs/latest/reference/config/ltpa.html[LTPA] 設定要素を参照してください。 + + +[#jwt] +== JOSE ヘッダーからの JWT 署名および復号化アルゴリズムの選択サポート + +JSON Web Token (JWT) は、さまざまな暗号署名アルゴリズムを使用して署名できます。このリリースでは、JWT Consumer、MicroProfile JWT、OpenID Connect Client、Social Media Login 機能が、JOSE ヘッダーから JWT 署名アルゴリズムを選択することをサポートします。このサポートにより、トークンヘッダーに基づいて異なる署名アルゴリズムを使用できるようになります。 + +以前は、`server.xml` ファイルの各設定に対して、1 つの署名アルゴリズム(例:`RS256`)のみを設定できました。受信した JWT が異なるアルゴリズムで署名されている場合、検証は失敗していました。この更新により、JWT ヘッダーの署名アルゴリズムを検証に使用できるようになります。これにより、単一の設定内で異なる署名アルゴリズムを使用する柔軟性が提供されます。 + +=== 使用方法 + +ヘッダーからの署名アルゴリズム選択を有効にするには、`signatureAlgorithm` 属性を `FROM_HEADER` に設定し、オプションで `allowedSignatureAlgorithms` 属性を設定して許可するアルゴリズムを指定します。 + +`allowedSignatureAlgorithms` が設定されていない場合、デフォルトリストには Open Liberty がサポートするすべての署名アルゴリズムが含まれます:`RS256`、`RS384`、`RS512`、`HS256`、`HS384`、`HS512`、`ES256`、`ES384`、`ES512`。 + +非対称アルゴリズムとトラストストア設定で `FROM_HEADER` を使用する場合、公開鍵には対応するアルゴリズムのプレフィックスを付ける必要があります(例:`RS256_keyalias`)。検証中、サーバーは JWT のヘッダーで指定されたアルゴリズムで始まるエイリアスをトラストストアで検索します。アルゴリズムのプレフィックスが付いたエイリアスが見つからない場合、クライアントは `trustedAlias` 属性(`jwtConsumer` の場合)または `trustAliasName` 属性(`openidConnectClient`、`oidcLogin`、`mpJwt` の場合)で指定されたエイリアスの使用にフォールバックします(設定されている場合)。 + +サポートされている要素にこれらの設定を適用する方法の例については、次の `server.xml` ファイル設定を参照してください: + +[source,xml] +---- + + + + + + + +---- + +=== 詳細情報 + +*サーバー設定:* + +* link:https://openliberty.io/docs/latest/reference/config/openidConnectClient.html[openidConnectClient] +* link:https://openliberty.io/docs/latest/reference/config/jwtConsumer.html[jwtConsumer] +* link:https://openliberty.io/docs/latest/reference/config/mpJwt.html[mpJwt] +* link:https://openliberty.io/docs/latest/reference/config/oidcLogin.html[oidcLogin] + +*ドキュメント:* + +* link:https://openliberty.io/docs/latest/reference/feature/openidConnectClient-1.0.html[OpenID Connect Client 1.0] +* link:https://openliberty.io/docs/latest/reference/feature/jwt-1.0.html[JSON Web Token 1.0] +* link:https://openliberty.io/docs/latest/reference/feature/mpJwt-2.1.html[MicroProfile JWT 2.1] +* link:https://openliberty.io/docs/latest/reference/feature/socialLogin-1.0.html[Social Media Login 1.0] + +[#java_26] +=== Java 26 のサポート +Java 26 は、以前のバージョンに比べて新機能と拡張機能を導入した最新の Java リリースです。このリリースは長期サポート(LTS)リリースではありません。 + +link:https://openjdk.org/projects/jdk/26/[Java 26] には 10 の新機能(JEP)があります。5 つはテスト機能で、5 つは完全に提供されています。 + +*テスト機能:* + +* 524: link:https://openjdk.org/jeps/524[PEM Encodings of Cryptographic Objects (Second Preview)] +* 525: link:https://openjdk.org/jeps/525[Structured Concurrency (Sixth Preview)] +* 526: link:https://openjdk.org/jeps/526[Lazy Constants (Second Preview)] +* 529: link:https://openjdk.org/jeps/529[Vector API (Eleventh Incubator)] +* 530: link:https://openjdk.org/jeps/530[Primitive Types in Patterns, instanceof, and switch (Fourth Preview)] + +*提供された機能:* + +* 500: link:https://openjdk.org/jeps/500[Prepare to Make Final Mean Final] +* 504: link:https://openjdk.org/jeps/504[Remove the Applet API] +* 516: link:https://openjdk.org/jeps/516[Ahead-of-Time Object Caching with Any GC] +* 517: link:https://openjdk.org/jeps/517[HTTP/3 for the HTTP Client API] +* 522: link:https://openjdk.org/jeps/522[G1 GC: Improve Throughput by Reducing Synchronization] + +Java 26 の新しい変更 JEP 500(「Prepare to Make Final Mean Final」)は、深いリフレクションを使用する際に final フィールドの変更を制限することで、final フィールドの真の不変性の強制を開始します。 +Java 26 では、このような変更は引き続き機能しますが、デフォルトで実行時警告をトリガーし、開発者がより厳格な強制に備えることができます。 +将来のリリースでは、例外をスローする可能性が高く、final を真に不変にします。 + +開発者は、JVM フラグ(例:`--illegal-final-field-mutation=deny`)を使用して、この厳格な動作を早期に選択し、問題を早期に検出できます。 +この変更により、プログラムの正確性、セキュリティ、および JVM 最適化が向上します。 + +今すぐこれらの変更を活用して、アプリケーションとマイクロサービスが Java 26 でどのように動作するかを評価する時間を増やしてください。 + +link:https://developer.ibm.com/languages/java/semeru-runtimes/downloads/[IBM Semeru Runtime 26] または link:https://adoptium.net/temurin/releases/?version=26[Temurin 26] の最新リリースをダウンロードし、Open Liberty link:{url-prefix}/start/#runtime_releases[26.0.0.4] をダウンロードしてインストールすることで、今日から始めることができます。Liberty サーバーの link:{url-prefix}/docs/latest/reference/config/server-configuration-overview.html#server-env[server.env] ファイルを更新し、`JAVA_HOME` を Java 26 インストールディレクトリに設定してテストを開始してください。 + +Java 26 の詳細については、Java 26 の link:https://jdk.java.net/26/release-notes[リリースノートページ]および link:https://docs.oracle.com/en/java/javase/26/docs/api/index.html[API Javadoc ページ]を参照してください。 + + +// // // // DO NOT MODIFY THIS COMMENT BLOCK // // // // +// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/33622 +// Contact/Reviewer: ncpibm +// // // // // // // // +[#displayCustomizedExceptionText] +== displayCustomizedExceptionText プロパティ +このリリースでは、`displayCustomizedExceptionText` 設定のドキュメントとテストが追加されました。これにより、ユーザーは Liberty のデフォルトエラーメッセージ(SRVE0218E: Forbidden や SRVE0232E: An exception occurred など)を、より明確なユーザー定義メッセージでオーバーライドできます。 + +この機能は、シンプルな `server.xml` ファイル設定を通じて有効化され、カスタムメッセージを特定の HTTP ステータスコード(`403` および `500`)にマッピングできます。 + +テストにより、これらのカスタムメッセージがサポートされているすべてのプラットフォームで Liberty のデフォルトを正しく置き換えることが確認され、設定されたテキストがすべてのシナリオで一貫して返されることが確認されます。 + +[source,xml] +---- + +---- + +// DO NOT MODIFY THIS LINE. + +// // // // // // // // +// In the preceding section: +// Replace TAG_X/SUB_TAG_X with the given tag of your secton from the contents list +// Replace SUB_FEATURE_TITLE/FEATURE_X_TITLE with the given title from the contents list +// Replace FEATURE with the feature name for the server.xml file e.g. mpHealth-1.4 +// Replace LINK with the link for extra information given for the feature +// Replace LINK_DESCRIPTION with a readable description of the information +// // // // // // // // + +[#CVEs] +== このリリースでのセキュリティ脆弱性 (CVE) 修正 +[cols="5*"] +|=== +|CVE |CVSS スコア |脆弱性内容 |影響を受けるバージョン |備考 + +|https://www.cve.org/CVERecord?id=CVE-2025-14915[CVE-2025-14915] +|6.5 +|権限昇格 +|17.0.0.3-26.0.0.3 +|restConnector-2.0 機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2025-14917[CVE-2025-14917] +|6.7 +|セキュリティの弱体化 +|17.0.0.3-26.0.0.3 +|appSecurity-1.0、appSecurity-2.0、appSecurity-3.0、appSecurity-4.0、appSecurity-5.0 機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2026-1561[CVE-2026-1561] +|5.4 +|サーバーサイドリクエストフォージェリ (SSRF) +|17.0.0.3-26.0.0.3 +|samlWeb-2.0 機能に影響 + +|https://www.cve.org/CVERecord?id=CVE-2026-29063[CVE-2026-29063] +|8.7 +|プロトタイプ汚染 +|17.0.0.3-26.0.0.3 +|openapi-3.1、mpOpenAPI-1.0、mpOpenAPI-1.1、mpOpenAPI-2.0、mpOpenAPI-3.0、mpOpenAPI-3.1、mpOpenAPI-4.0、mpOpenAPI-4.1 機能に影響 + +|=== +// +// If there are no CVEs fixed in this release, replace the table with: +// "There are no security vulnerability fixes in Open Liberty [ 26.0.0.4 ]." +// // // // // // // // +過去の脆弱性修正の一覧については、Open Liberty の link:{url-prefix}/docs/latest/security-vulnerabilities.html[セキュリティ脆弱性 (CVE) のリスト]を参照してください。 + + +// // // // // // // // +// In the preceding section: +// For this section ask either Michal Broz or Tom Evans or the #openliberty-release-blog channel for Notable bug fixes in this release. +// Present them as a list in the order as provided, linking to the issue and providing a short description of the bug and the resolution. +// If the issue on Github is missing any information, leave a comment in the issue along the lines of: +// "@[issue_owner(s)] please update the description of this `release bug` using the [bug report template](https://github.com/OpenLiberty/open-liberty/issues/new?assignees=&labels=release+bug&template=bug_report.md&title=)" +// Feel free to message the owner(s) directly as well, especially if no action has been taken by them. +// For inspiration about how to write this section look at previous blogs e.g- 20.0.0.10 or 21.0.0.12 (https://openliberty.io/blog/2021/11/26/jakarta-ee-9.1.html#bugs) +// // // // // // // // + + + +== Open Liberty 26.0.0.4 を今すぐ入手 + +このバージョンは<>からダウンロード可能です。 \ No newline at end of file From 4dc8dea2e88e42c1f8fb95f8d834cd36e1d0df89 Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Tue, 2 Jun 2026 13:11:16 -0400 Subject: [PATCH 03/14] latest version Signed-off-by: Siaa Gor --- ...-05-open-liberty-with-langchain4j-rag.adoc | 572 ++++++++++++++++++ 1 file changed, 572 insertions(+) create mode 100644 posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc diff --git a/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc b/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc new file mode 100644 index 0000000000..906c4c276b --- /dev/null +++ b/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc @@ -0,0 +1,572 @@ +--- +layout: post +title: "Building a Retrieval-Augmented Generation (RAG) application by using LangChain4j and MongoDB Atlas vector database" +# Do NOT change the categories section +categories: blog +author_picture: https://avatars3.githubusercontent.com/SiaaG-dev +author_github: https://github.com/SiaaG-dev +seo-title: RAG using LangChain4j and MongoDB Atlas vector database with Open Liberty* OpenLiberty.io +seo-description: Experience how RAG can be used with Open Liberty to provide accurate, relevant, and domain-specific responses. +blog_description: "Learn how to build RAG in Jakarta EE and MicroProfile applications using the LangChain4j library and MongoDB Atlas vector database on Open Liberty" +open-graph-image: https://openliberty.io/img/twitter_card.jpg +open-graph-image-alt: Open Liberty Logo +--- += Building a Retrieval-Augmented Generation (RAG) application by using LangChain4j and MongoDB Atlas vector database +Siaa G +:imagesdir: / +:url-prefix: +:url-about: / +//Blank line here is necessary before starting the body of the post. + +// // // // // // // // +// In the preceding section: +// Do not insert any blank lines between any of the lines. +// +// "open-graph-image" is set to OL logo. Whenever possible update this to a more appropriate/specific image (For example if present a image that is being used in the post). However, it +// can be left empty which will set it to the default +// +// "open-graph-image-alt" is a description of what is in the image (not a caption). When changing "open-graph-image" to +// a custom picture, you must provide a custom string for "open-graph-image-alt". +// +// Replace TITLE with the blog post title. +// Replace AUTHOR_NAME with your name as first author. +// Replace GITHUB_USERNAME with your GitHub username eg: lauracowen +// Replace DESCRIPTION with a short summary (~60 words) of the release (a more succinct version of the first paragraph of the post). +// +// Replace AUTHOR_NAME with your name as you'd like it to be displayed, eg: Laura Cowen +// +// Example post: 2020-04-02-generate-microprofile-rest-client-code.adoc +// +// If adding image into the post add : +// ------------------------- +// [.img_border_light] +// image::img/blog/FILE_NAME[IMAGE CAPTION ,width=70%,align="center"] +// ------------------------- +// "[.img_border_light]" = This adds a faint grey border around the image to make its edges sharper. Use it around screenshots but not +// around diagrams. Then double check how it looks. +// There is also a "[.img_border_dark]" class which tends to work best with screenshots that are taken on dark backgrounds. +// Change "FILE_NAME" to the name of the image file. Also make sure to put the image into the right folder which is: img/blog +// change the "IMAGE CAPTION" to a couple words of what the image is +// // // // // // // // + +Artificial Intelligence (AI) and generative AI have significantly impacted the economy and transformed how businesses operate. Generative AI uses Large Language Models (LLMs) to generate text through probabilistic methods. These models are often trained on historical data, and the training data may lack domain-specific or specialized knowledge. To address this limitation, Retrieval-Augmented Generation (RAG) can be used to provide relevant and up-to-date information efficiently and effectively. The data used in RAG can come from various sources, including websites, vector databases, and images. As a result, multiple forms of RAG have emerged. For example, multimodal RAG works with different types of unstructured data, such as text and images, while Graph RAG uses knowledge graphs as the information source. + +This post demonstrates how to build a RAG application using LangChain4j to connect to AI provider models and store textual data in a MongoDB Atlas database. In this sample application, a local MongoDB Atlas deployment is used, although the database can also be connected through other methods, such as a cloud connection string. +This example also uses a vector database. Vector databases play an important role in developing a wide range of use cases, including natural language search and recommendation systems. +MongoDB Atlas Vector Search provides unified data storage by keeping vector and operational data in one place, an efficient hybrid search mechanism that combines vector search with full-text search for metadata, and powerful aggregation pipelines. Additionally, MongoDB Atlas scales vector search independently from the core database, improving performance for production-heavy workloads. + +* <> +* <> +* <> + +[#what_is_RAG] +== What is Retrieval Augmented Generation (RAG)? +Retrieval Augmented Generation (RAG) is an approach that the application uses to generate consistent, and relevant information from a model without the need to retrain a model which can become expensive and time-consuming. Without RAG, the LLM limits to general or outdated information rather than showing relevant domain specific information. +There are different RAG techniques such as naive, advanced, and modular RAG. To learn more, visit https://www.ibm.com/think/topics/rag-techniques[RAG techniques] or https://docs.langchain4j.dev/tutorials/rag/[LangChain4j tutorials]. The focus of this tutorial is to learn the technique of data retrieval from the vector database. + + +This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates management of the database; this will be the first demonstration. Likewise, the horizontal flow of the architecture diagram depicts inference or data retrieval from database to LLM; this will be the second demonstration. + + +In the vertical flow, the first step is to process and store the content as embeddings (vectors) inside the database. Each embedding corresponds to some text data. + + +The horizontal flow starts when the user sends a message to the LLM. Upon the user query, the query is converted to an embedding. The query embedding and the knowledge base embeddings are compared; similar database embeddings are obtained from vector search and their respective content is obtained. +The similar content (from the knowledge base) is appended to the user query. This becomes the augmented message sent to the LLM. The LLM now gains access to the relevant content from the knowledge base and is able to generate a specific response based on the information. + +The sample RAG application consists of two parts: the OpenAPI UI where the API requests can be made to manage the vector database and the data retrieval phase that occurs when using the chat application. + +image::/img/blog/sample-langchain4j-rag-diagram.png[Diagram of How RAG Works,width=70%,align="center"] + +To learn more about how vector search works, visit https://www.ibm.com/think/topics/vector-embedding[think topics for embeddings] and https://www.ibm.com/think/topics/vector-search[think topics for vector search]. + +The sample application demonstrates: + +* How to integrate LangChain4j with MicroProfile and Jakarta EE + +* How to use MongoDB Atlas locally + +* How to create OpenAPI UI and build a chat application + +* How vector search works + +[#tryout] +== Try out the RAG application + +To try out the sample application using your own knowledge base, check out this https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db[example]. + +[#pre-reqs] +=== Prerequisites +Before you clone and run the sample application, make sure to install the following: + + +* https://git-scm.com/book/en/v2/Getting-Started-Installing-Git[Git] to access the repository remotely + +* https://developer.ibm.com/languages/java/semeru-runtimes/downloads[Java 21 IBM Semeru Runtime] + +** Ensure that `JAVA_HOME` environment variable is set: `export JAVA_HOME=` + +* Embedding Model + +** Download and install https://ollama.com/download[Ollama]. + +** Pull the following embedding model: `ollama pull nomic-embed-text` + +** Ensure that Ollama is running successfully: curl http://localhost:11434 + +* Ensure that the provided `ENCRYPTION_KEY` environment variable is set: `export ENCRYPTION_KEY=customEncryptionKey1` + +* LLM Provider: Chat Model + +** The application can use a variety of chat model providers. You can choose any of them and follow their instructions: <>, <>, <>. + +* https://www.docker.com/get-started/[Docker] + +** Follow the instructions in the official https://docs.docker.com/engine/installation[Docker documentation] to install Docker, and setup your Docker environment. This tutorial runs an instance of MongoDB Atlas using Docker. For more information about the `mongodb/mongodb-atlas-local` image, see https://hub.docker.com/r/mongodb/mongodb-atlas-local[mongodb/mongodb-atlas-local] in Docker Hub. + +[#llm-setup] +=== LLM Provider Setup +[#github_setup] +==== GitHub +1. Sign up and sign in to https://github.com +2. Go to your https://github.com/settings/tokens[Personal access tokens] +3. Generate a new token with the `models` account permission +4. Set the GitHub key environment variable: + * `export GITHUB_API_KEY=` or `set GITHUB_API_KEY=` + +[#ollama_setup] +==== Ollama +1. Pull the following model: + * `ollama pull llama3.2` +2. Set the Ollama base url environment variable: + * `export OLLAMA_BASE_URL=http://localhost:11434` or `set OLLAMA_BASE_URL=http://localhost:11434` + +[#mistral_setup] +==== Mistral +1. Sign up and log in to https://console.mistral.ai/home +2. Go to https://console.mistral.ai/api-keys[Your API keys] +3. Create a new key +4. Set the Mistral API key environment variable: + * `export MISTRAL_AI_API_KEY=` or `set MISTRAL_AI_API_KEY=` + +To clone the https://github.com/OpenLiberty/sample-langchain4j[sample-langchain4j repository], run the command below. + +[source] +---- +git clone https://github.com/OpenLiberty/sample-langchain4j.git +---- + +=== Running MongoDB in a Docker container + +To run MongoDB in this example application, navigate to the `sample-langchain4j/rag-db` directory: + +[source] +---- +cd sample-langchain4j/rag-db +---- + +Run the following command to start the MongoDB Atlas container: + +[source] +---- +docker compose -f docker-compose.yml up -d +---- + +[#start_app] +=== Start the application + +Use the Maven wrapper to start the application by using the https://openliberty.io/docs/latest/development-mode.html[Liberty dev mode]: + +[source] +---- +./mvnw liberty:dev +---- + +When you see the following message, the application is ready: + +---- +************************************************************************ +* Liberty is running in dev mode. +* Automatic generation of features: [ Off ] +* h - see the help menu for available actions, type 'h' and press Enter. +* q - stop the server and quit dev mode, press Ctrl-C or type 'q' and press Enter. +* +* Liberty server port information: +* Liberty server HTTP port: [ 9080 ] +* Liberty server HTTPS port: [ 9443 ] +* Liberty debug port: [ 7777 ] +************************************************************************ +---- + +[#access_app] +=== Access the application + +Ensure that one of the following model providers are used: GitHub, Ollama or MistralAI. +Once the application has started, experiment with the chat application at http://localhost:9081/ as shown below by trying out different prompts and http://localhost:9081/openapi/ui/ by trying out different requests. +Detailed instructions are found in the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/README.md[README]. + +image::/img/blog/sample-langchain4j-rag-chat-room.png[Chat room of the RAG example,width=70%,align="center"] + +At the prompt, try out the following messages at http://localhost:9081/: + +* `Explain the Core Profile and Jakarta EE JSON Binding?` + +* `What are the default ConfigSources and the values? List in the order of default precedence.` + +==== Before the application uses RAG +Try out different messages at http://localhost:9081/. The suggested messages are provided above. +Notice that the AI responses are general and may not capture the complete details from the knowledge base. + +==== Initialize the database by navigating to http://localhost:9081/openapi/ui/. See the OpenAPI user interface (UI). +- Login to try a particular API. + * For authentication purposes and for admin access, use `bob` and his password is `bobpwd`. + * For authentication purposes and for read only limited access, use `alice` and her password is `alicepwd`. +- Try the POST request at `/api/embedding/init` which processes and adds the knowledge base from `sample-langchain4j/rag-db/src/main/resources/knowledge_base`. + +==== Now, the application uses RAG +Navigate to http://localhost:9081/. At the prompt, try out the suggested messages again. +Compare the AI responses to the knowledge base files at the `sample-langchain4j/rag-db/src/main/resources/knowledge_base` https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/resources/knowledge_base[directory]. The response should be more specific and relevant compared to the responses before. + +You can try out adding your own data into the database directly by using POST `/api/embedding` API and then try out messages in RAG chat application. + +Note that the embeddings and content that are stored in MongoDB previously are preserved even after restarting the application by stopping and running `./mvnw liberty:dev` again. + +To ensure that the application works successfully, you can run the tests by pressing the `enter/return` key from the command-line session. If the tests pass, you can see output similar to the following example: + +---- +[INFO] ------------------------------------------------------- +[INFO] T E S T S +[INFO] ------------------------------------------------------- +[INFO] Running it.io.openliberty.sample.langchain4j.RAGChatServiceIT +[INFO] ... +[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.329 s -- in it.io.openliberty.sample.langchain4j.RAGChatServiceIT +[INFO] ... +[INFO] Running it.io.openliberty.sample.langchain4j.EmbeddingServiceIT +[INFO] ... +[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.668 s -- in it.io.openliberty.sample.langchain4j.EmbeddingServiceIT +[INFO] +[INFO] Results: +[INFO] +[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0 +---- + + +[#how_app_work] +== How does the application work? + +The application demonstrates how to use the https://docs.langchain4j.dev/[LangChain4j APIs], https://www.mongodb.com/products/platform/atlas-database[MongoDB Atlas database], https://openliberty.io/docs/ref/feature/#cdi-4.0.html[Jakarta Contexts and Dependency Injection], https://openliberty.io/docs/latest/reference/feature/websocket-2.1.html[Jakarta WebSocket], https://openliberty.io/docs/ref/feature/#mpConfig-3.0.html[MicroProfile Config], and https://openliberty.io/docs/latest/reference/feature/mpMetrics-5.1.html[MicroProfile Metrics] features. +We will go through a step by step process to create a RAG application. + +=== Connecting to MongoDB Atlas + +The docker-compose file is used to create a local containerized MongoDB Atlas database using the `mongodb/mongodb-atlas-local` image. +The database credentials are set inside the environment. Furthermore, the ports connect the host port to the container MongoDB port at 27017. + +[source] +---- +services: + mongodb: + image: mongodb/mongodb-atlas-local + environment: + - MONGODB_INITDB_ROOT_USERNAME= ... + - MONGODB_INITDB_ROOT_PASSWORD= ... + ports: + - 27017:27017 +---- + +Inside the https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo[mongo] directory, `MongoProducer` class produces a `MongoDatabase` object that is used in other classes, and https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[AtlasMongoDB.java] file contains methods to create search indexes, retrieve similar content, remove, update, or delete the database contents. + +In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[MongoProducer.java], various configuration properties information is injected from the `microprofile-config.properties`. + +[source] +---- + @Inject + @ConfigProperty(name = "mongo.dbname", defaultValue = "embeddingsdb") + String dbName; + + @Inject + @ConfigProperty(name = "mongo.user") + String user; + + @Inject + @ConfigProperty(name = "mongo.pass.encoded") + String encodedPass; +---- + +The `createMongo()` function decodes the password, and uses connection string in the form of: `"mongodb://" +user + ":" + password + "@"+ hostname + ":" + port + "/" +dbName+ "?authSource=admin&directConnection=true"` to produce a `MongoClient` object. +The `MongoDatabase` object is produced by invoking the `getDatabase(dbName)` method on `MongoClient` instance and creates the database if the database with that name did not exist before. +The `close(MongoClient)` method closes the connection. + +[source] +---- +@Produces + public MongoClient createMongo(){ + String password = PasswordUtil.passwordDecode(encodedPass); + return MongoClients.create(MongoClientSettings.builder() + .applyConnectionString( + new ConnectionString("mongodb://" + + user + ":" + password + "@"+ hostname + ":" + port + + "/" +dbName+ "?authSource=admin&directConnection=true")) + .build()); + } + + @Produces + public MongoDatabase createDB(MongoClient client) { + return client.getDatabase(dbName); + } + + public void close(@Disposes MongoClient toClose) { + toClose.close(); + } +---- +This `MongoDatabase` object will be used by other classes. + +=== Building REST APIs to manage the vector database + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingApplication.java[EmbeddingApplication.java] and the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java[EmbeddingService.java] are used to build the REST APIs to manage the vector database. + +The embedding application is created at `/api` in https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingApplication.java[EmbeddingApplication.java]. + + +[source] +---- +@ApplicationPath("/api") +public class EmbeddingApplication extends Application { + +} +---- + +You can explore the REST APIs that are available on http://localhost:9081/openapi/ui/. +This tutorial explores the two different POST requests: one request adds a document with summary and content while the other initializes the database with the knowledge base. +Moreover, this post further elucidates how the PUT and the DELETE request are implemented. + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L75-L110[EmbeddingService.java] implements various REST APIs upon request at the application path `/embedding`. +Additionally, the `AtlasMongoDB` class provides relevant functions such as creating search indexes, or retrieving similar content that is used by the `EmbeddingService` class. + +==== POST request at /api/embedding + +After the user inputs their own summary and content for the POST request, the method below is invoked. + +A new BSON `Document` object is created and contains three keys: "Summary", "Content", and "Vector" with their respective values. The content entered by the user is converted to a vector using LangChain4j APIs such as `embed`, `content`, and `vector`. +The `insertOne` method then inserts this `Document` object for the existing collection. +To explore how the `insertOne` method works, visit https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L101-L103[AtlasMongoDB.java]. + +[source] +---- + Document newEmbedding = new Document(); + newEmbedding.put("Summary", summary); + newEmbedding.put("Content", content); + newEmbedding.put("Vector", + toFloat(modelBuilder.getEmbeddingModel().embed(content).content().vector())); + mongoDB.insertOne(newEmbedding); +---- + +Thus, this request provides the ability to add custom summary and content so that it can be used during RAG. + +==== POST request at /api/embedding/init + +In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L112-L164[EmbeddingService.java], the POST request initializes the MongoDB database from the knowledge_base directory inside resources. + + +Before the application executes a vector search (during inference), a search index must be created. +The text of each file in the knowledge base is extracted. The summary is the first line in the file and the content is the rest of the file. Each `Document` object contains a summary, content, and embedding vector of the summary. Each document is inserted into MongoDB Atlas database. + +[source] +---- + @POST + @Path("/init") + ... + public Response initializeDatabase() { + if (mongoDB.isEmpty()) { + mongoDB.createIndex(); + try { + ClassLoader classLoader = EmbeddingService.class.getClassLoader(); + for (String txtFile : MD_FILES) { + InputStream inStream = classLoader.getResourceAsStream("knowledge_base/" + txtFile); + if (inStream != null) { + InputStreamReader reader = new InputStreamReader(inStream, StandardCharsets.UTF_8); + BufferedReader br = new BufferedReader(reader); + String summary = br.readLine(); + StringBuffer content = new StringBuffer(); + String line; + while ((line = br.readLine()) != null) { + content.append(line).append("\n"); + } + br.close(); + reader.close(); + inStream.close(); + Document newEmbedding = new Document(); + newEmbedding.put("Summary", summary); + newEmbedding.put("Content", content.toString()); + newEmbedding.put("Vector", + toFloat(modelBuilder.getEmbeddingModel().embed(summary).content().vector())); + mongoDB.insertOne(newEmbedding); + } + } + //Return Response with Status.OK: Successfully loaded knowledge base into MongoDB. + ... + } catch (Exception exception) { + ... + //Return Response with internal server error + } + + } + + //Return Response with Status.OK since knowledge base is already initialized. + } +---- + +The `createIndex()` method in https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L64-L91[AtlasMongoDB.java] generates a search index after creating a new collection called `EmbeddingsStored`. Furthermore, the `createSearchIndexes` method from MongoDB uses the information +such as the vector dimension of the embedding model, the cosine similarity, and the path (location of the vector inside the document). + +[source] +---- + public void createIndex() { + + db.createCollection(COLLECTION_NAME); + MongoCollection embeddingStore = db.getCollection(COLLECTION_NAME); + + Bson documentDefinition = new Document("fields", + Collections.singletonList( + new Document("type", "vector") + .append("path", PATH) + .append("numDimensions", modelBuilder.getEmbeddingModel().dimension()) + .append("similarity", "cosine"))); + SearchIndexType vectorSearch = SearchIndexType.vectorSearch(); + List searchIndexModels = Collections.singletonList( + new SearchIndexModel(SEARCH_INDEX_NAME, documentDefinition, vectorSearch)); + + sleep(TIMEOUT); + embeddingStore.createSearchIndexes(searchIndexModels); + ... + } +---- + +The `createSearchIndexes` method executes the request. The loop verifies that search indexes are ready when the queryable value becomes true. + +[source] +---- + public void createIndex() { + ... + boolean indexReady = false; + do { + Document index = embeddingStore.listSearchIndexes().first(); + JSONObject json = new JSONObject(index.toJson()); + boolean queryable = json.getBoolean("queryable"); + if (queryable && json.getString("name").equals(SEARCH_INDEX_NAME)) { + indexReady = true; + break; + } + } while (!indexReady); + } +---- +==== PUT request at /api/embedding/{id} + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L200-L257[PUT request] updates the existing content and summary of a document given the object id. A new `Document` object with summary, content and updated vector replaces the existing object by using the `replaceOne` method. + +==== DELETE request at /api/embedding/{id} + +Likewise, the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L259-L294[DELETE request] requires the object id and uses the `deleteOne` method to delete a particular document. + +==== GET request at /api/embedding + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L166-L198[GET request] lists the embeddings from the database using the `retrieve` method. It uses the `mongoDB.getCollection().find()` that returns all the `Document` objects from MongoDB. + +[#create_service] +=== Retrieving data from the vector database + +In the first step, the user interacts with the RAG Chat Application. +The `ChatService` class controls what happens upon any action on the http://localhost:9081/. + +When a message is sent by the user, the `onMessage()` function is executed. +The user query is converted to an embedding vector which is a `List`. +Then the `retrieveContent`, method of `AtlasMongoDB` class, performs the vector search and returns +the text segments that are similar to the user query. + +The message is appended with these results and sent to the AI using the `agent.chat(sessionId, message)`; + +[source] +---- + @OnMessage + @Timed(name = "chatProcessingTime", absolute = true, + description = "Time needed chatting to the agent.") + public void onMessage(String message, Session session) { + ... + String sessionId = session.getId(); + float[] userQueryEmbedding = mongoDB.convertUserQueryToEmbedding(message); + List result = toFloat(userQueryEmbedding); + List output = mongoDB.retrieveContent(result, message); + message += "Here are some relevant information from the knowledge base: "; + message += output; + String answer = agent.chat(sessionId, message); + ... + + } +---- + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L109-L122[`retrieveContent` method] takes in an embedding vector of type `List`, and the actual query text. Note that the user message embedding is converted to a `List` because the vectors stored in the database are also of type `List`. + + +The `userQuery` vector, the location or `PATH` to where the vectors are stored in the database and other values are required to perform the vector search. Vector search selects `NUM_CANDIDATES` vectors in the nearby group in the latent space, and returns `MAX_RESULTS_TO_AI` number of documents, based on the `SEARCH_INDEX_NAME`. The aggregate returns the results for `$vectorSearch` command and each result is a type of `Document` object. + +[source] +---- + public List retrieveContent(List userQuery, String query) { + List similarContent = new ArrayList<>(); + Document vecSearchDocument = new Document("queryVector", userQuery) + .append("path", PATH) + .append("numCandidates", NUM_CANDIDATES) + .append("limit", MAX_RESULTS_TO_AI) + .append("index", SEARCH_INDEX_NAME); + Bson vectorSearch = new Document("$vectorSearch", vecSearchDocument); + AggregateIterable results = getCollection().aggregate(Arrays.asList(vectorSearch)); + for (Document result : results) { + similarContent.add(result.getString("Content")); + } + return similarContent; + } +---- +The method `result.getString("Content")` obtains the content section inside the `Document` object for each of the results. + +[#summary] +== Conclusion: Building AI Applications powered by RAG and Open Liberty + +In this sample application, we have explored how to use a local MongoDB Atlas database and perform vector search to gain similar text results from the user query based on context. We have also seen a separate API to initialize the database with the knowledge base as depicted in the OpenAPI UI. +Moreover, the chat room application is built upon LangChain4j APIs to connect to the AI providers. LangChain4j APIs are used to chat with the LLM, and also provide respective embedding models. + +A few advantages for using RAG in an AI powered application include: + +* **Increased context understanding** - Relevant answers based on context compared to regular search mechanisms +* **Efficient in terms of time and cost** - RAG provides an easy way to get relevant answers which is time and cost effective compared to training large models on proprietary information. +* **Hallucination reduction** - With more information provided to the LLM, the AI is better equipped to generate accurate and reliable content. +* **Saves manual effort** - Productivity is increased as the user does not need to search the entire knowledge base and then provide the information to the LLM. Instead, the relevant information is automatically searched based on the context and provided to the LLM for efficient retrieval. +* **Customized response** - Control the response based on industry or domain-specific information + +Several approaches that can be taken to extend this sample application include: + +* Developing a hybrid search approach such as vector search combined with a full text based search to improve search results +* Enhancing the pre-retrieval stages to rewrite the query optimally or compressing the documents so that only the most relevant information is sent to the LLM +* Implementing a Graph RAG to understand relationships between more interconnected context +* Developing Agentic RAG with multi-step reasoning + +As various versions of RAG evolve with even more capabilities, context-aware insights in intelligent AI applications open the horizon for enriching the quality of AI generated responses. + +[#where_to_next] +== Where to next? + +Check out the link:https://openliberty.io/guides/[Open Liberty guides^] for more information and interactive tutorials that walk you through using more Jakarta EE and MicroProfile APIs with Open Liberty. + +[#help_links] +== Find out more +* link:https://github.com/langchain4j[LangChain4j] +* link:https://www.mongodb.com/docs/atlas/cli/current/atlas-cli-deploy-docker/[MongoDB Atlas Docker] +* link:https://docs.langchain4j.dev/category/tutorials[LangChain4j Tutorials] +* link:https://www.ibm.com/think/topics/vector-database[Vector database] +* link:https://openliberty.io/blog/2025/10/22/open-liberty-with-langchain4j-tools.html[Calling LLM tools with LangChain4j in MicroProfile and Jakarta EE applications] +* link:https://openliberty.io/blog/2024/04/01/open-liberty-with-langchain4j-example.html[Run AI-enabled Jakarta EE and MicroProfile applications on Open Liberty^] +* link:https://openliberty.io/guides/jakarta-websocket.html[Bidirectional communication between services using Jakarta WebSocket^] + + +// // // // // // // // +// LINKS +// +// OpenLiberty.io site links: +// link:/guides/microprofile-rest-client.html[Consuming RESTful Java microservices] +// +// Off-site links: +// link:https://openapi-generator.tech/docs/installation#jar[Download Instructions] +// +// // // // // // // // \ No newline at end of file From aa19459f3ad85ec6b7e5b898be79e5f9af86cd07 Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Tue, 2 Jun 2026 13:22:51 -0400 Subject: [PATCH 04/14] sync with latest changes Signed-off-by: Siaa Gor --- img/blog/sample-langchain4j-rag-chat-room.png | Bin 0 -> 221608 bytes img/blog/sample-langchain4j-rag-diagram.png | Bin 0 -> 139649 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/blog/sample-langchain4j-rag-chat-room.png create mode 100644 img/blog/sample-langchain4j-rag-diagram.png diff --git a/img/blog/sample-langchain4j-rag-chat-room.png b/img/blog/sample-langchain4j-rag-chat-room.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb88e7c24b08b48a7203b09f5941ecf6e1f7e38 GIT binary patch literal 221608 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

f#$(Mn%SO!6|5JnO!* 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%0DKupkJ5 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 QU*MmDtg1}v@29=~58XP&D*ylh literal 0 HcmV?d00001 From 0bec7e95af2db6d2c4a9b05bacd68f23f60a00f8 Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Tue, 9 Jun 2026 17:24:24 -0400 Subject: [PATCH 05/14] addressed suggestions for the blog Signed-off-by: Siaa Gor --- ...-05-open-liberty-with-langchain4j-rag.adoc | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc b/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc index 906c4c276b..8ecf3d035c 100644 --- a/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc +++ b/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc @@ -51,9 +51,9 @@ Siaa G Artificial Intelligence (AI) and generative AI have significantly impacted the economy and transformed how businesses operate. Generative AI uses Large Language Models (LLMs) to generate text through probabilistic methods. These models are often trained on historical data, and the training data may lack domain-specific or specialized knowledge. To address this limitation, Retrieval-Augmented Generation (RAG) can be used to provide relevant and up-to-date information efficiently and effectively. The data used in RAG can come from various sources, including websites, vector databases, and images. As a result, multiple forms of RAG have emerged. For example, multimodal RAG works with different types of unstructured data, such as text and images, while Graph RAG uses knowledge graphs as the information source. -This post demonstrates how to build a RAG application using LangChain4j to connect to AI provider models and store textual data in a MongoDB Atlas database. In this sample application, a local MongoDB Atlas deployment is used, although the database can also be connected through other methods, such as a cloud connection string. +This post demonstrates how to build a RAG application using LangChain4j to connect to AI provider models and store textual data in a MongoDB Atlas database. In this sample application, a local MongoDB Atlas deployment is used. This example also uses a vector database. Vector databases play an important role in developing a wide range of use cases, including natural language search and recommendation systems. -MongoDB Atlas Vector Search provides unified data storage by keeping vector and operational data in one place, an efficient hybrid search mechanism that combines vector search with full-text search for metadata, and powerful aggregation pipelines. Additionally, MongoDB Atlas scales vector search independently from the core database, improving performance for production-heavy workloads. +Moreover, MongoDB Atlas Vector Search provides the option for hybrid search mechanism that combines vector search with full-text search. Additionally, MongoDB Atlas scales vector search independently from the core database which can help with performance in production environments. * <> * <> @@ -61,17 +61,17 @@ MongoDB Atlas Vector Search provides unified data storage by keeping vector and [#what_is_RAG] == What is Retrieval Augmented Generation (RAG)? -Retrieval Augmented Generation (RAG) is an approach that the application uses to generate consistent, and relevant information from a model without the need to retrain a model which can become expensive and time-consuming. Without RAG, the LLM limits to general or outdated information rather than showing relevant domain specific information. +Retrieval Augmented Generation (RAG) is an architectural approach that combines information retrieval with generative AI to deliver accurate and context-aware responses while avoiding costly retraining. Without RAG, an LLM is limited to the information available during training and cannot reliably access proprietary business knowledge, including internal policies of a company, processes, and domain-specific documentation. There are different RAG techniques such as naive, advanced, and modular RAG. To learn more, visit https://www.ibm.com/think/topics/rag-techniques[RAG techniques] or https://docs.langchain4j.dev/tutorials/rag/[LangChain4j tutorials]. The focus of this tutorial is to learn the technique of data retrieval from the vector database. + This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates management of the database; this will be the first demonstration. Likewise, the horizontal flow of the architecture diagram depicts inference or data retrieval from database to LLM; this will be the second demonstration. + In the vertical flow, the first step is to process and store the content as embeddings (vectors) inside the database. Each embedding corresponds to some text data. + -The horizontal flow starts when the user sends a message to the LLM. Upon the user query, the query is converted to an embedding. The query embedding and the knowledge base embeddings are compared; similar database embeddings are obtained from vector search and their respective content is obtained. -The similar content (from the knowledge base) is appended to the user query. This becomes the augmented message sent to the LLM. The LLM now gains access to the relevant content from the knowledge base and is able to generate a specific response based on the information. +The horizontal flow starts when the user sends a message to the AI application. Upon the user query, the query is converted to an embedding; notice the `user message embedding` on the diagram. The query embedding and the knowledge base embeddings are compared, as shown in the interaction between the `vector search` block and the `database`. Similar database embeddings are obtained from the `vector search` block output and their respective content is obtained, as shown in the circled `list of similar content`. +Following the arrow direction in the figure, the similar content (from the knowledge base) is appended to the user query. This becomes the augmented message sent to the Chat Agent which is responsible for calling the LLM. The LLM now gains access to the relevant content from the knowledge base and can generate a specific response based on the information. -The sample RAG application consists of two parts: the OpenAPI UI where the API requests can be made to manage the vector database and the data retrieval phase that occurs when using the chat application. +Note that sample RAG application consists of two parts: the OpenAPI UI where the API requests can be made to manage the vector database (vertical flow in the figure) and the data retrieval phase that occurs when using the chat application (horizontal flow in the figure). image::/img/blog/sample-langchain4j-rag-diagram.png[Diagram of How RAG Works,width=70%,align="center"] @@ -96,27 +96,27 @@ To try out the sample application using your own knowledge base, check out this === Prerequisites Before you clone and run the sample application, make sure to install the following: + -* https://git-scm.com/book/en/v2/Getting-Started-Installing-Git[Git] to access the repository remotely +1. https://git-scm.com/book/en/v2/Getting-Started-Installing-Git[Git] to access the repository remotely -* https://developer.ibm.com/languages/java/semeru-runtimes/downloads[Java 21 IBM Semeru Runtime] +2. https://developer.ibm.com/languages/java/semeru-runtimes/downloads[Java 21 IBM Semeru Runtime] ** Ensure that `JAVA_HOME` environment variable is set: `export JAVA_HOME=` -* Embedding Model +3. Embedding Model ** Download and install https://ollama.com/download[Ollama]. ** Pull the following embedding model: `ollama pull nomic-embed-text` -** Ensure that Ollama is running successfully: curl http://localhost:11434 +** Ensure that Ollama is running: curl http://localhost:11434 -* Ensure that the provided `ENCRYPTION_KEY` environment variable is set: `export ENCRYPTION_KEY=customEncryptionKey1` +4. The encryption key for this sample application is required for Liberty to decrypt the `mongo.pass.encoded`. Ensure that the provided `ENCRYPTION_KEY` environment variable is set: `export ENCRYPTION_KEY=customEncryptionKey1` -* LLM Provider: Chat Model +5. LLM Provider: Chat Model ** The application can use a variety of chat model providers. You can choose any of them and follow their instructions: <>, <>, <>. -* https://www.docker.com/get-started/[Docker] +6. https://www.docker.com/get-started/[Docker] ** Follow the instructions in the official https://docs.docker.com/engine/installation[Docker documentation] to install Docker, and setup your Docker environment. This tutorial runs an instance of MongoDB Atlas using Docker. For more information about the `mongodb/mongodb-atlas-local` image, see https://hub.docker.com/r/mongodb/mongodb-atlas-local[mongodb/mongodb-atlas-local] in Docker Hub. @@ -126,7 +126,7 @@ Before you clone and run the sample application, make sure to install the follow ==== GitHub 1. Sign up and sign in to https://github.com 2. Go to your https://github.com/settings/tokens[Personal access tokens] -3. Generate a new token with the `models` account permission +3. Generate a new fine-grained personal access token. You will need to add the `Models` read-only permission. 4. Set the GitHub key environment variable: * `export GITHUB_API_KEY=` or `set GITHUB_API_KEY=` @@ -197,7 +197,6 @@ When you see the following message, the application is ready: [#access_app] === Access the application -Ensure that one of the following model providers are used: GitHub, Ollama or MistralAI. Once the application has started, experiment with the chat application at http://localhost:9081/ as shown below by trying out different prompts and http://localhost:9081/openapi/ui/ by trying out different requests. Detailed instructions are found in the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/README.md[README]. @@ -270,7 +269,7 @@ services: - 27017:27017 ---- -Inside the https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo[mongo] directory, `MongoProducer` class produces a `MongoDatabase` object that is used in other classes, and https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[AtlasMongoDB.java] file contains methods to create search indexes, retrieve similar content, remove, update, or delete the database contents. +Inside the https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo[mongo] directory, https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[`MongoProducer`] class produces a `MongoDatabase` object that is used in other classes, and https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[AtlasMongoDB.java] file contains methods to create search indexes, retrieve similar content, remove, update, or delete the database contents. In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[MongoProducer.java], various configuration properties information is injected from the `microprofile-config.properties`. @@ -333,17 +332,17 @@ public class EmbeddingApplication extends Application { You can explore the REST APIs that are available on http://localhost:9081/openapi/ui/. This tutorial explores the two different POST requests: one request adds a document with summary and content while the other initializes the database with the knowledge base. -Moreover, this post further elucidates how the PUT and the DELETE request are implemented. +Moreover, this post further elucidates how the PUT and the DELETE requests are implemented. -The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L75-L110[EmbeddingService.java] implements various REST APIs upon request at the application path `/embedding`. -Additionally, the `AtlasMongoDB` class provides relevant functions such as creating search indexes, or retrieving similar content that is used by the `EmbeddingService` class. +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L75-L110[EmbeddingService.java] implements various REST APIs at the application path `/embedding`. +Additionally, the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[`AtlasMongoDB`] class provides relevant functions such as creating search indexes, or retrieving similar content that is used by the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java[`EmbeddingService`] class. ==== POST request at /api/embedding After the user inputs their own summary and content for the POST request, the method below is invoked. A new BSON `Document` object is created and contains three keys: "Summary", "Content", and "Vector" with their respective values. The content entered by the user is converted to a vector using LangChain4j APIs such as `embed`, `content`, and `vector`. -The `insertOne` method then inserts this `Document` object for the existing collection. +The `insertOne` method then inserts this `Document` object into the existing collection. To explore how the `insertOne` method works, visit https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L101-L103[AtlasMongoDB.java]. [source] @@ -470,11 +469,11 @@ The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/ === Retrieving data from the vector database In the first step, the user interacts with the RAG Chat Application. -The `ChatService` class controls what happens upon any action on the http://localhost:9081/. +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/ChatService.java[`ChatService`] class controls what happens upon any action on the http://localhost:9081/. When a message is sent by the user, the `onMessage()` function is executed. The user query is converted to an embedding vector which is a `List`. -Then the `retrieveContent`, method of `AtlasMongoDB` class, performs the vector search and returns +Then the `retrieveContent`, method of https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[`AtlasMongoDB`] class, performs the vector search and returns the text segments that are similar to the user query. The message is appended with these results and sent to the AI using the `agent.chat(sessionId, message)`; @@ -532,16 +531,8 @@ A few advantages for using RAG in an AI powered application include: * **Increased context understanding** - Relevant answers based on context compared to regular search mechanisms * **Efficient in terms of time and cost** - RAG provides an easy way to get relevant answers which is time and cost effective compared to training large models on proprietary information. * **Hallucination reduction** - With more information provided to the LLM, the AI is better equipped to generate accurate and reliable content. -* **Saves manual effort** - Productivity is increased as the user does not need to search the entire knowledge base and then provide the information to the LLM. Instead, the relevant information is automatically searched based on the context and provided to the LLM for efficient retrieval. * **Customized response** - Control the response based on industry or domain-specific information -Several approaches that can be taken to extend this sample application include: - -* Developing a hybrid search approach such as vector search combined with a full text based search to improve search results -* Enhancing the pre-retrieval stages to rewrite the query optimally or compressing the documents so that only the most relevant information is sent to the LLM -* Implementing a Graph RAG to understand relationships between more interconnected context -* Developing Agentic RAG with multi-step reasoning - As various versions of RAG evolve with even more capabilities, context-aware insights in intelligent AI applications open the horizon for enriching the quality of AI generated responses. [#where_to_next] From 5274242a8e51124248da9d3ea382051c80ed1ffa Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Tue, 9 Jun 2026 17:31:53 -0400 Subject: [PATCH 06/14] updates from suggestions Signed-off-by: Siaa Gor --- ...g.adoc => 2026-06-12-open-liberty-with-langchain4j-rag.adoc} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename posts/{2026-06-05-open-liberty-with-langchain4j-rag.adoc => 2026-06-12-open-liberty-with-langchain4j-rag.adoc} (99%) diff --git a/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc similarity index 99% rename from posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc rename to posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc index 8ecf3d035c..64edf8a25c 100644 --- a/posts/2026-06-05-open-liberty-with-langchain4j-rag.adoc +++ b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc @@ -531,7 +531,7 @@ A few advantages for using RAG in an AI powered application include: * **Increased context understanding** - Relevant answers based on context compared to regular search mechanisms * **Efficient in terms of time and cost** - RAG provides an easy way to get relevant answers which is time and cost effective compared to training large models on proprietary information. * **Hallucination reduction** - With more information provided to the LLM, the AI is better equipped to generate accurate and reliable content. -* **Customized response** - Control the response based on industry or domain-specific information +* **Improved response** - Improve the response based on industry or domain-specific information As various versions of RAG evolve with even more capabilities, context-aware insights in intelligent AI applications open the horizon for enriching the quality of AI generated responses. From 2189e1a219d99951a785ae29d94957282cf6fce5 Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Fri, 12 Jun 2026 10:37:23 -0400 Subject: [PATCH 07/14] changes Signed-off-by: Siaa Gor --- ...-12-open-liberty-with-langchain4j-rag.adoc | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc index 64edf8a25c..2f4a466f92 100644 --- a/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc +++ b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc @@ -5,7 +5,7 @@ title: "Building a Retrieval-Augmented Generation (RAG) application by using Lan categories: blog author_picture: https://avatars3.githubusercontent.com/SiaaG-dev author_github: https://github.com/SiaaG-dev -seo-title: RAG using LangChain4j and MongoDB Atlas vector database with Open Liberty* OpenLiberty.io +seo-title: RAG using LangChain4j and MongoDB Atlas vector database with Open Liberty OpenLiberty.io seo-description: Experience how RAG can be used with Open Liberty to provide accurate, relevant, and domain-specific responses. blog_description: "Learn how to build RAG in Jakarta EE and MicroProfile applications using the LangChain4j library and MongoDB Atlas vector database on Open Liberty" open-graph-image: https://openliberty.io/img/twitter_card.jpg @@ -53,10 +53,10 @@ Artificial Intelligence (AI) and generative AI have significantly impacted the e This post demonstrates how to build a RAG application using LangChain4j to connect to AI provider models and store textual data in a MongoDB Atlas database. In this sample application, a local MongoDB Atlas deployment is used. This example also uses a vector database. Vector databases play an important role in developing a wide range of use cases, including natural language search and recommendation systems. -Moreover, MongoDB Atlas Vector Search provides the option for hybrid search mechanism that combines vector search with full-text search. Additionally, MongoDB Atlas scales vector search independently from the core database which can help with performance in production environments. +Moreover, MongoDB Atlas Vector Search provides an option for hybrid search that combines vector search with full-text search. Additionally, MongoDB Atlas scales vector search independently from the core database which can improve performance in production environments. * <> -* <> +* <> * <> [#what_is_RAG] @@ -64,14 +64,14 @@ Moreover, MongoDB Atlas Vector Search provides the option for hybrid search mech Retrieval Augmented Generation (RAG) is an architectural approach that combines information retrieval with generative AI to deliver accurate and context-aware responses while avoiding costly retraining. Without RAG, an LLM is limited to the information available during training and cannot reliably access proprietary business knowledge, including internal policies of a company, processes, and domain-specific documentation. There are different RAG techniques such as naive, advanced, and modular RAG. To learn more, visit https://www.ibm.com/think/topics/rag-techniques[RAG techniques] or https://docs.langchain4j.dev/tutorials/rag/[LangChain4j tutorials]. The focus of this tutorial is to learn the technique of data retrieval from the vector database. + -This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates management of the database; this will be the first demonstration. Likewise, the horizontal flow of the architecture diagram depicts inference or data retrieval from database to LLM; this will be the second demonstration. + +This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates database management; this will be the first demonstration. Likewise, the horizontal flow of the architecture diagram depicts inference or data retrieval from the database to the LLM; this will be the second demonstration. + In the vertical flow, the first step is to process and store the content as embeddings (vectors) inside the database. Each embedding corresponds to some text data. + -The horizontal flow starts when the user sends a message to the AI application. Upon the user query, the query is converted to an embedding; notice the `user message embedding` on the diagram. The query embedding and the knowledge base embeddings are compared, as shown in the interaction between the `vector search` block and the `database`. Similar database embeddings are obtained from the `vector search` block output and their respective content is obtained, as shown in the circled `list of similar content`. +The horizontal flow starts when the user sends a message to the AI application. When the user submits a query, the query is converted to an embedding; notice the `user message embedding` on the diagram. The query embedding and the knowledge base embeddings are compared, as shown in the interaction between the `vector search` block and the `database`. Similar database embeddings are obtained from the `vector search` block output and their respective content is obtained, as shown in the circled `list of similar content`. Following the arrow direction in the figure, the similar content (from the knowledge base) is appended to the user query. This becomes the augmented message sent to the Chat Agent which is responsible for calling the LLM. The LLM now gains access to the relevant content from the knowledge base and can generate a specific response based on the information. -Note that sample RAG application consists of two parts: the OpenAPI UI where the API requests can be made to manage the vector database (vertical flow in the figure) and the data retrieval phase that occurs when using the chat application (horizontal flow in the figure). +Note that the sample RAG application consists of two parts: the OpenAPI UI where the API requests can be made to manage the vector database (vertical flow in the figure) and the data retrieval phase that occurs when using the chat application (horizontal flow in the figure). image::/img/blog/sample-langchain4j-rag-diagram.png[Diagram of How RAG Works,width=70%,align="center"] @@ -83,7 +83,7 @@ The sample application demonstrates: * How to use MongoDB Atlas locally -* How to create OpenAPI UI and build a chat application +* How to create an OpenAPI UI and build a chat application * How vector search works @@ -94,13 +94,13 @@ To try out the sample application using your own knowledge base, check out this [#pre-reqs] === Prerequisites -Before you clone and run the sample application, make sure to install the following: + +Before you clone and run the sample application, make sure that you have the following: + 1. https://git-scm.com/book/en/v2/Getting-Started-Installing-Git[Git] to access the repository remotely 2. https://developer.ibm.com/languages/java/semeru-runtimes/downloads[Java 21 IBM Semeru Runtime] -** Ensure that `JAVA_HOME` environment variable is set: `export JAVA_HOME=` +** Ensure that the `JAVA_HOME` environment variable is set: `export JAVA_HOME=` 3. Embedding Model @@ -118,7 +118,7 @@ Before you clone and run the sample application, make sure to install the follow 6. https://www.docker.com/get-started/[Docker] -** Follow the instructions in the official https://docs.docker.com/engine/installation[Docker documentation] to install Docker, and setup your Docker environment. This tutorial runs an instance of MongoDB Atlas using Docker. For more information about the `mongodb/mongodb-atlas-local` image, see https://hub.docker.com/r/mongodb/mongodb-atlas-local[mongodb/mongodb-atlas-local] in Docker Hub. +** Follow the instructions in the official https://docs.docker.com/engine/installation[Docker documentation] to install Docker, and set up your Docker environment. This tutorial runs an instance of MongoDB Atlas using Docker. For more information about the `mongodb/mongodb-atlas-local` image, see https://hub.docker.com/r/mongodb/mongodb-atlas-local[mongodb/mongodb-atlas-local] in Docker Hub. [#llm-setup] === LLM Provider Setup @@ -134,7 +134,7 @@ Before you clone and run the sample application, make sure to install the follow ==== Ollama 1. Pull the following model: * `ollama pull llama3.2` -2. Set the Ollama base url environment variable: +2. Set the Ollama base URL environment variable: * `export OLLAMA_BASE_URL=http://localhost:11434` or `set OLLAMA_BASE_URL=http://localhost:11434` [#mistral_setup] @@ -214,15 +214,15 @@ Notice that the AI responses are general and may not capture the complete detail ==== Initialize the database by navigating to http://localhost:9081/openapi/ui/. See the OpenAPI user interface (UI). - Login to try a particular API. - * For authentication purposes and for admin access, use `bob` and his password is `bobpwd`. - * For authentication purposes and for read only limited access, use `alice` and her password is `alicepwd`. + * For authentication purposes and for admin access, use `bob` as the username and his password is `bobpwd`. + * For authentication purposes and for read only limited access, use `alice` as the username and her password is `alicepwd`. - Try the POST request at `/api/embedding/init` which processes and adds the knowledge base from `sample-langchain4j/rag-db/src/main/resources/knowledge_base`. ==== Now, the application uses RAG Navigate to http://localhost:9081/. At the prompt, try out the suggested messages again. Compare the AI responses to the knowledge base files at the `sample-langchain4j/rag-db/src/main/resources/knowledge_base` https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/resources/knowledge_base[directory]. The response should be more specific and relevant compared to the responses before. -You can try out adding your own data into the database directly by using POST `/api/embedding` API and then try out messages in RAG chat application. +You can try out adding your own data into the database directly by using the POST `/api/embedding` API and then try out messages in the RAG chat application. Note that the embeddings and content that are stored in MongoDB previously are preserved even after restarting the application by stopping and running `./mvnw liberty:dev` again. @@ -269,9 +269,9 @@ services: - 27017:27017 ---- -Inside the https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo[mongo] directory, https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[`MongoProducer`] class produces a `MongoDatabase` object that is used in other classes, and https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[AtlasMongoDB.java] file contains methods to create search indexes, retrieve similar content, remove, update, or delete the database contents. +Inside the https://github.com/OpenLiberty/sample-langchain4j/tree/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo[mongo] directory, https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[`MongoProducer`] class produces a `MongoDatabase` object that is used in other classes, and the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[AtlasMongoDB.java] file contains methods to create search indexes, retrieve similar content, remove, update, or delete the database contents. -In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[MongoProducer.java], various configuration properties information is injected from the `microprofile-config.properties`. +In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/MongoProducer.java[MongoProducer.java], various configuration properties are injected from the `microprofile-config.properties`. [source] ---- @@ -288,8 +288,8 @@ In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/j String encodedPass; ---- -The `createMongo()` function decodes the password, and uses connection string in the form of: `"mongodb://" +user + ":" + password + "@"+ hostname + ":" + port + "/" +dbName+ "?authSource=admin&directConnection=true"` to produce a `MongoClient` object. -The `MongoDatabase` object is produced by invoking the `getDatabase(dbName)` method on `MongoClient` instance and creates the database if the database with that name did not exist before. +The `createMongo()` function decodes the password and uses a connection string in the form of: `"mongodb://" +user + ":" + password + "@"+ hostname + ":" + port + "/" +dbName+ "?authSource=admin&directConnection=true"` to produce a `MongoClient` object. +The `MongoDatabase` object is produced by invoking the `getDatabase(dbName)` method on the `MongoClient` instance and it creates the database if the database with that name did not exist before. The `close(MongoClient)` method closes the connection. [source] @@ -362,7 +362,7 @@ Thus, this request provides the ability to add custom summary and content so tha In https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L112-L164[EmbeddingService.java], the POST request initializes the MongoDB database from the knowledge_base directory inside resources. + Before the application executes a vector search (during inference), a search index must be created. -The text of each file in the knowledge base is extracted. The summary is the first line in the file and the content is the rest of the file. Each `Document` object contains a summary, content, and embedding vector of the summary. Each document is inserted into MongoDB Atlas database. +The text of each file in the knowledge base is extracted. The summary is the first line in the file and the content is the rest of the file. Each `Document` object contains a summary, content, and embedding vector of the summary. Each document is inserted into the MongoDB Atlas database. [source] ---- @@ -409,7 +409,7 @@ The text of each file in the knowledge base is extracted. The summary is the fir } ---- -The `createIndex()` method in https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L64-L91[AtlasMongoDB.java] generates a search index after creating a new collection called `EmbeddingsStored`. Furthermore, the `createSearchIndexes` method from MongoDB uses the information +The `createIndex()` method in https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L64-L91[AtlasMongoDB.java] generates a search index after creating a new collection called `EmbeddingsStored`. Furthermore, the `createSearchIndexes` method from MongoDB uses information such as the vector dimension of the embedding model, the cosine similarity, and the path (location of the vector inside the document). [source] @@ -435,7 +435,7 @@ such as the vector dimension of the embedding model, the cosine similarity, and } ---- -The `createSearchIndexes` method executes the request. The loop verifies that search indexes are ready when the queryable value becomes true. +The `createSearchIndexes` method executes the request. The loop verifies that the search indexes are ready when the queryable value becomes true. [source] ---- @@ -455,11 +455,11 @@ The `createSearchIndexes` method executes the request. The loop verifies that se ---- ==== PUT request at /api/embedding/{id} -The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L200-L257[PUT request] updates the existing content and summary of a document given the object id. A new `Document` object with summary, content and updated vector replaces the existing object by using the `replaceOne` method. +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L200-L257[PUT request] updates the existing content and summary of a document given the object ID. A new `Document` object with summary, content and updated vector replaces the existing object by using the `replaceOne` method. ==== DELETE request at /api/embedding/{id} -Likewise, the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L259-L294[DELETE request] requires the object id and uses the `deleteOne` method to delete a particular document. +Likewise, the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/EmbeddingService.java#L259-L294[DELETE request] requires the object ID and uses the `deleteOne` method to delete a particular document. ==== GET request at /api/embedding @@ -473,7 +473,7 @@ The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/ When a message is sent by the user, the `onMessage()` function is executed. The user query is converted to an embedding vector which is a `List`. -Then the `retrieveContent`, method of https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[`AtlasMongoDB`] class, performs the vector search and returns +Then the `retrieveContent`, method of the https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java[`AtlasMongoDB`] class, performs the vector search and returns the text segments that are similar to the user query. The message is appended with these results and sent to the AI using the `agent.chat(sessionId, message)`; @@ -482,14 +482,14 @@ The message is appended with these results and sent to the AI using the `agent.c ---- @OnMessage @Timed(name = "chatProcessingTime", absolute = true, - description = "Time needed chatting to the agent.") + description = "Time needed for chatting with the agent.") public void onMessage(String message, Session session) { ... String sessionId = session.getId(); float[] userQueryEmbedding = mongoDB.convertUserQueryToEmbedding(message); List result = toFloat(userQueryEmbedding); List output = mongoDB.retrieveContent(result, message); - message += "Here are some relevant information from the knowledge base: "; + message += "Here are some relevant sections/information from the knowledge base: "; message += output; String answer = agent.chat(sessionId, message); ... @@ -497,9 +497,9 @@ The message is appended with these results and sent to the AI using the `agent.c } ---- -The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L109-L122[`retrieveContent` method] takes in an embedding vector of type `List`, and the actual query text. Note that the user message embedding is converted to a `List` because the vectors stored in the database are also of type `List`. + +The https://github.com/OpenLiberty/sample-langchain4j/blob/main/rag-db/src/main/java/io/openliberty/sample/langchain4j/mongo/AtlasMongoDB.java#L109-L122[`retrieveContent` method] takes an embedding vector of type `List`, and the actual query text. Note that the user message embedding is converted to a `List` because the vectors stored in the database are also of type `List`. + -The `userQuery` vector, the location or `PATH` to where the vectors are stored in the database and other values are required to perform the vector search. Vector search selects `NUM_CANDIDATES` vectors in the nearby group in the latent space, and returns `MAX_RESULTS_TO_AI` number of documents, based on the `SEARCH_INDEX_NAME`. The aggregate returns the results for `$vectorSearch` command and each result is a type of `Document` object. +The `userQuery` vector, the location or `PATH` to where the vectors are stored in the database and other values are required to perform the vector search. Vector search selects `NUM_CANDIDATES` vectors in the nearby group in the latent space, and returns `MAX_RESULTS_TO_AI` number of documents, based on the `SEARCH_INDEX_NAME`. The aggregate returns the results for the `$vectorSearch` command and each result is a type of `Document` object. [source] ---- @@ -518,13 +518,13 @@ The `userQuery` vector, the location or `PATH` to where the vectors are stored i return similarContent; } ---- -The method `result.getString("Content")` obtains the content section inside the `Document` object for each of the results. +The method `result.getString("Content")` obtains the content inside the `Document` object for each of the results. [#summary] == Conclusion: Building AI Applications powered by RAG and Open Liberty In this sample application, we have explored how to use a local MongoDB Atlas database and perform vector search to gain similar text results from the user query based on context. We have also seen a separate API to initialize the database with the knowledge base as depicted in the OpenAPI UI. -Moreover, the chat room application is built upon LangChain4j APIs to connect to the AI providers. LangChain4j APIs are used to chat with the LLM, and also provide respective embedding models. +Moreover, the chat room application is built upon LangChain4j APIs to connect to the AI providers. LangChain4j APIs are used to chat with the LLM, and also provide the respective embedding models. A few advantages for using RAG in an AI powered application include: @@ -533,7 +533,7 @@ A few advantages for using RAG in an AI powered application include: * **Hallucination reduction** - With more information provided to the LLM, the AI is better equipped to generate accurate and reliable content. * **Improved response** - Improve the response based on industry or domain-specific information -As various versions of RAG evolve with even more capabilities, context-aware insights in intelligent AI applications open the horizon for enriching the quality of AI generated responses. +As RAG evolves with new capabilities, context-aware insights continue to enhance the quality of AI-generated responses. [#where_to_next] == Where to next? From 68a79f676034149f9223a43bef3fb0928fe626fa Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Fri, 12 Jun 2026 11:56:26 -0400 Subject: [PATCH 08/14] sync with staging Signed-off-by: Siaa Gor --- ...re-cryptography-for-liberty-for-linux.adoc | 172 ------------------ posts/ja/2026-04-21-26.0.0.4.adoc | 0 2 files changed, 172 deletions(-) delete mode 100644 posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc mode change 100755 => 100644 posts/ja/2026-04-21-26.0.0.4.adoc diff --git a/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc b/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc deleted file mode 100644 index 7b5c9f16be..0000000000 --- a/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc +++ /dev/null @@ -1,172 +0,0 @@ ---- -layout: post -title: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17" -# Do NOT change the categories section -categories: blog -author_picture: https://avatars0.githubusercontent.com/una-tapa -author_github: https://github.com/una-tapa -seo-title: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 -seo-description: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security. -blog_description: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security." -open-graph-image: https://openliberty.io/img/twitter_card.jpg -open-graph-image-alt: Open Liberty Logo -additional_authors: -- name: Laura Cowen - github: https://github.com/lauracowen - image: https://avatars3.githubusercontent.com/lauracowen -- name: Jessie Zhou - github: https://github.com/RoastedMilkTea - image: https://avatars0.githubusercontent.com/RoastedMilkTea ---- -= Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 -Hiroko Takamiya -:imagesdir: / -:url-prefix: -:url-about: / -//Blank line here is necessary before starting the body of the post. - -Hardware cryptography, through hardware security modules (HSM), provides enhanced security for applications that are running on Liberty on distributed Linux environments. The following instructions to integrate Liberty on distributed Linux with hardware cryptographic devices were successfully tested by a customer who was using a Thales Luna HSM with Semeru Java 17. These instructions should also be applicable to other Java versions; see <> for potential modifications needed. The configuration should be adaptable to other hardware security modules that support the PKCS#11 interface. - -## Example use cases - -The HSM integration with Liberty enables enhanced security for various cryptographic operations. Here are some example use cases: - -- **Secure Web Services with HSM-Protected Keys**: Liberty serves as a secure web service endpoint using TLS with the server’s private key stored in the HSM. The TLS handshake uses the HSM-protected key, ensuring the private key never leaves the secure hardware boundary, even if the Liberty server is compromised. -- **Mutual TLS Authentication for Microservices**: Liberty stores client certificates in the HSM for outbound connections requiring mutual TLS. The HSM handles the cryptographic operations for client authentication, protecting the private key material. -- **Digital Signature Services**: Applications can use the HSM to sign data (like JSON Web Tokens) with keys that are generated and stored within the HSM. The signing operation occurs inside the hardware, maintaining the integrity of the signing process. -- **Secure Data Encryption and Decryption**: Encryption keys are securely stored in the HSM, and encryption/decryption operations are performed by the hardware, providing an additional layer of security for sensitive data. -- **Certificate Authority Operations**: Organizations running their own CA can store root and intermediate certificate private keys in the HSM, with certificate signing operations performed within the hardware to ensure the highest level of protection for these critical security assets. - -== Steps -. Install HSM client libraries that enable communication between your application and the HSM. - -. Configure authentication between the Linux server and the HSM to establish secure communication. -Create and register a self-signed client certificate, establishing mutual TLS as the authentication method. - -. Create a PKCS#11 configuration file that defines how Java will interact with the HSM through the PKCS#11 interface. -+ -For example, the following PKCS11Config.cfg file was created with assistance from Luna Support and saved in the Liberty server configuration directory: - - description = Thales Luna HSM/PKCS11 Configuration - name = PKCS11Config - library = /opt/safenet/lunaclient/lib/libCryptoki2_64.so - slot = 0 - showInfo = true - attributes(*,CKO_SECRET_KEY,*) = { - CKA_CLASS=4 - CKA_PRIVATE= true - CKA_KEY_TYPE = 21 - CKA_SENSITIVE= true - CKA_ENCRYPT= true - CKA_DECRYPT= true - CKA_WRAP= true - CKA_UNWRAP= true - } - attributes(*,CKO_PRIVATE_KEY,*) = { - CKA_CLASS=3 - CKA_LABEL=true - CKA_PRIVATE = true - CKA_DECRYPT=true - CKA_SIGN=true - CKA_UNWRAP=true - } - attributes(*,CKO_PUBLIC_KEY,*) = { - CKA_CLASS=2 - CKA_LABEL=true - CKA_ENCRYPT = true - CKA_VERIFY=true - CKA_WRAP=true - } - -. Update the Java security configuration to include the PKCS#11 provider. + -+ -For example, create a `java.security` file in the same directory as the `server.xml` file with the following content to add the SunPKCS11 provider pointing to the `PKCS11Config.cfg` file: - - security.provider.1=SunPKCS11 ${server.config.dir}/PKCS11Config.cfg - security.provider.2=SUN - security.provider.3=SunRsaSign - security.provider.4=SunEC - security.provider.5=SunJSSE - security.provider.6=SunJCE - security.provider.7=SunJGSS - security.provider.8=SunSASL - security.provider.9=XMLDSig - security.provider.10=SunPCSC - security.provider.11=JdkLDAP - security.provider.12=JdkSASL - -+ -Also create, a `jvm.options` file in the same directory with the following content to point to the custom `java.security` file: - - -Djava.security.properties=${server.config.dir}/java.security - -. Set up a hardware-based keystore/truststore, a file-based keystore/truststore, or both: -* For a HSM (hardware-based keystore/truststore), create or import the necessary certificates for your application's security requirements. (i.e. TLS server certificate and client certificates for various use cases). -* For a file-based keystore/truststore, create a standard file-based truststore to hold trusted CA certificates. For example, a traditional PKCS12 file-based keystore can be created to serve as the general "truststore" in Liberty, which includes the CA certificates to be trusted. - -. Edit the Liberty `server.xml` file to use the HSM-backed keystore, the file-based truststore, or both by adding the relevant configuration snippets: - - - - - - - - - - transportSecurity-1.0 - - ssl-1.0 - -. Configure the Liberty server environment variables. -+ -For example, edit the Liberty `server.env` file with the following configuration: - - JAVA_HOME=/etc/alternatives/jre_17 - JVM_ARGS="--add-exports=jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED" - -* Where: The `--add-exports` JVM argument is necessary because in Java 17, the Java module system restricts access to internal packages. The PKCS#11 implementation requires access to classes in the `sun.security.pkcs11` package, which is part of the `jdk.crypto.cryptoki` module. This argument explicitly allows Liberty to access these internal classes that are needed for the HSM integration to work properly. -** Similar JVM arguments might be required for other Java versions that use the module system (Java 9 and later). The specific arguments might vary slightly depending on the Java version. - -. Configure any JVM options that are required for your specific HSM compatibility. For example, to disable unsupported algorithms, add the list of algorithms to the Liberty `jvm.options` file: - - -Djdk.tls.disabledAlgorithms=RSASSA-PSS,RSAPSS - -. Start the Liberty server and verify that the HSM integration is working correctly. - -== Troubleshooting -If you encounter issues with your HSM integration, consider enabling PKCS#11 debug logging by adding to jvm.options: - - -Djava.security.debug=sunpkcs11,pkcs11 - -For specific HSM-related issues, consult your HSM vendor's documentation and support resources. - -== Java version considerations -While these steps were written and tested with Semeru Java 17, they should be applicable to other Java versions with potential minor adjustments: - -* The module-related JVM arguments (`--add-exports`) may vary depending on the Java version -* The exact path to the Java installation will differ -* Security provider configurations may have slight differences between Java versions - -== Related articles -- link:https://openliberty.io/docs/latest/reference/config/server-configuration-overview.html[Server configuration overview] -- link:https://openliberty.io/docs/latest/reference/feature/feature-overview.html[Feature Overview] -- link:https://www.ibm.com/support/pages/enabling-hardware-cryptography-liberty-zos-using-java-11-java-17-or-java-21?view=full[Enabling hardware cryptography for Liberty for z/OS using Java 11, Java 17, or Java 21] - - - -== Acknowledgements -We would like to sincerely thank a valued customer who, while choosing to remain anonymous, generously shared his expertise with us. Access to this level of specialized hardware and configuration experience is rare. Through collaboration, persistence, and thoughtful experimentation, he helped validate solutions and provided the practical steps documented here. -His willingness to share these insights will benefit many others in the WAS community facing similar challenges. We deeply appreciate his generosity and the meaningful impact of his contribution. \ No newline at end of file diff --git a/posts/ja/2026-04-21-26.0.0.4.adoc b/posts/ja/2026-04-21-26.0.0.4.adoc old mode 100755 new mode 100644 From f702d0b538f34a09f39079409e4ad87fb0e2e2c0 Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Fri, 12 Jun 2026 13:25:19 -0400 Subject: [PATCH 09/14] applied suggestions Signed-off-by: Siaa Gor --- posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc index 2f4a466f92..b70728f69b 100644 --- a/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc +++ b/posts/2026-06-12-open-liberty-with-langchain4j-rag.adoc @@ -60,11 +60,11 @@ Moreover, MongoDB Atlas Vector Search provides an option for hybrid search that * <> [#what_is_RAG] -== What is Retrieval Augmented Generation (RAG)? -Retrieval Augmented Generation (RAG) is an architectural approach that combines information retrieval with generative AI to deliver accurate and context-aware responses while avoiding costly retraining. Without RAG, an LLM is limited to the information available during training and cannot reliably access proprietary business knowledge, including internal policies of a company, processes, and domain-specific documentation. +== What is Retrieval-Augmented Generation (RAG)? +Retrieval-Augmented Generation (RAG) is an architectural approach that combines information retrieval with generative AI to deliver accurate and context-aware responses while avoiding costly retraining. Without RAG, an LLM is limited to the information available during training and cannot reliably access proprietary business knowledge, including internal policies of a company, processes, and domain-specific documentation. There are different RAG techniques such as naive, advanced, and modular RAG. To learn more, visit https://www.ibm.com/think/topics/rag-techniques[RAG techniques] or https://docs.langchain4j.dev/tutorials/rag/[LangChain4j tutorials]. The focus of this tutorial is to learn the technique of data retrieval from the vector database. + -This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates database management; this will be the first demonstration. Likewise, the horizontal flow of the architecture diagram depicts inference or data retrieval from the database to the LLM; this will be the second demonstration. + +This sample application contains two demonstrations. The vertical flow of the architecture diagram illustrates database management; this will be the first demonstration. The horizontal flow of the architecture diagram depicts inference or data retrieval from the database to the LLM; this will be the second demonstration. + In the vertical flow, the first step is to process and store the content as embeddings (vectors) inside the database. Each embedding corresponds to some text data. + @@ -75,7 +75,7 @@ Note that the sample RAG application consists of two parts: the OpenAPI UI where image::/img/blog/sample-langchain4j-rag-diagram.png[Diagram of How RAG Works,width=70%,align="center"] -To learn more about how vector search works, visit https://www.ibm.com/think/topics/vector-embedding[think topics for embeddings] and https://www.ibm.com/think/topics/vector-search[think topics for vector search]. +To learn more about how vector search works, explore https://www.ibm.com/think/topics/vector-embedding[Vector Embeddings] and https://www.ibm.com/think/topics/vector-search[Vector Search]. The sample application demonstrates: From 663419cb4fff741644777d8413a18cc855030f8c Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Fri, 12 Jun 2026 13:33:53 -0400 Subject: [PATCH 10/14] draft and staging have different file changes; sync with draft - for draft PR Signed-off-by: Siaa Gor --- ...re-cryptography-for-liberty-for-linux.adoc | 172 ++++++++++++++++++ posts/ja/2026-04-21-26.0.0.4.adoc | 0 2 files changed, 172 insertions(+) create mode 100644 posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc mode change 100644 => 100755 posts/ja/2026-04-21-26.0.0.4.adoc diff --git a/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc b/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc new file mode 100644 index 0000000000..7b5c9f16be --- /dev/null +++ b/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc @@ -0,0 +1,172 @@ +--- +layout: post +title: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17" +# Do NOT change the categories section +categories: blog +author_picture: https://avatars0.githubusercontent.com/una-tapa +author_github: https://github.com/una-tapa +seo-title: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 +seo-description: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security. +blog_description: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security." +open-graph-image: https://openliberty.io/img/twitter_card.jpg +open-graph-image-alt: Open Liberty Logo +additional_authors: +- name: Laura Cowen + github: https://github.com/lauracowen + image: https://avatars3.githubusercontent.com/lauracowen +- name: Jessie Zhou + github: https://github.com/RoastedMilkTea + image: https://avatars0.githubusercontent.com/RoastedMilkTea +--- += Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 +Hiroko Takamiya +:imagesdir: / +:url-prefix: +:url-about: / +//Blank line here is necessary before starting the body of the post. + +Hardware cryptography, through hardware security modules (HSM), provides enhanced security for applications that are running on Liberty on distributed Linux environments. The following instructions to integrate Liberty on distributed Linux with hardware cryptographic devices were successfully tested by a customer who was using a Thales Luna HSM with Semeru Java 17. These instructions should also be applicable to other Java versions; see <> for potential modifications needed. The configuration should be adaptable to other hardware security modules that support the PKCS#11 interface. + +## Example use cases + +The HSM integration with Liberty enables enhanced security for various cryptographic operations. Here are some example use cases: + +- **Secure Web Services with HSM-Protected Keys**: Liberty serves as a secure web service endpoint using TLS with the server’s private key stored in the HSM. The TLS handshake uses the HSM-protected key, ensuring the private key never leaves the secure hardware boundary, even if the Liberty server is compromised. +- **Mutual TLS Authentication for Microservices**: Liberty stores client certificates in the HSM for outbound connections requiring mutual TLS. The HSM handles the cryptographic operations for client authentication, protecting the private key material. +- **Digital Signature Services**: Applications can use the HSM to sign data (like JSON Web Tokens) with keys that are generated and stored within the HSM. The signing operation occurs inside the hardware, maintaining the integrity of the signing process. +- **Secure Data Encryption and Decryption**: Encryption keys are securely stored in the HSM, and encryption/decryption operations are performed by the hardware, providing an additional layer of security for sensitive data. +- **Certificate Authority Operations**: Organizations running their own CA can store root and intermediate certificate private keys in the HSM, with certificate signing operations performed within the hardware to ensure the highest level of protection for these critical security assets. + +== Steps +. Install HSM client libraries that enable communication between your application and the HSM. + +. Configure authentication between the Linux server and the HSM to establish secure communication. +Create and register a self-signed client certificate, establishing mutual TLS as the authentication method. + +. Create a PKCS#11 configuration file that defines how Java will interact with the HSM through the PKCS#11 interface. ++ +For example, the following PKCS11Config.cfg file was created with assistance from Luna Support and saved in the Liberty server configuration directory: + + description = Thales Luna HSM/PKCS11 Configuration + name = PKCS11Config + library = /opt/safenet/lunaclient/lib/libCryptoki2_64.so + slot = 0 + showInfo = true + attributes(*,CKO_SECRET_KEY,*) = { + CKA_CLASS=4 + CKA_PRIVATE= true + CKA_KEY_TYPE = 21 + CKA_SENSITIVE= true + CKA_ENCRYPT= true + CKA_DECRYPT= true + CKA_WRAP= true + CKA_UNWRAP= true + } + attributes(*,CKO_PRIVATE_KEY,*) = { + CKA_CLASS=3 + CKA_LABEL=true + CKA_PRIVATE = true + CKA_DECRYPT=true + CKA_SIGN=true + CKA_UNWRAP=true + } + attributes(*,CKO_PUBLIC_KEY,*) = { + CKA_CLASS=2 + CKA_LABEL=true + CKA_ENCRYPT = true + CKA_VERIFY=true + CKA_WRAP=true + } + +. Update the Java security configuration to include the PKCS#11 provider. + ++ +For example, create a `java.security` file in the same directory as the `server.xml` file with the following content to add the SunPKCS11 provider pointing to the `PKCS11Config.cfg` file: + + security.provider.1=SunPKCS11 ${server.config.dir}/PKCS11Config.cfg + security.provider.2=SUN + security.provider.3=SunRsaSign + security.provider.4=SunEC + security.provider.5=SunJSSE + security.provider.6=SunJCE + security.provider.7=SunJGSS + security.provider.8=SunSASL + security.provider.9=XMLDSig + security.provider.10=SunPCSC + security.provider.11=JdkLDAP + security.provider.12=JdkSASL + ++ +Also create, a `jvm.options` file in the same directory with the following content to point to the custom `java.security` file: + + -Djava.security.properties=${server.config.dir}/java.security + +. Set up a hardware-based keystore/truststore, a file-based keystore/truststore, or both: +* For a HSM (hardware-based keystore/truststore), create or import the necessary certificates for your application's security requirements. (i.e. TLS server certificate and client certificates for various use cases). +* For a file-based keystore/truststore, create a standard file-based truststore to hold trusted CA certificates. For example, a traditional PKCS12 file-based keystore can be created to serve as the general "truststore" in Liberty, which includes the CA certificates to be trusted. + +. Edit the Liberty `server.xml` file to use the HSM-backed keystore, the file-based truststore, or both by adding the relevant configuration snippets: + + + + + + + + + + transportSecurity-1.0 + + ssl-1.0 + +. Configure the Liberty server environment variables. ++ +For example, edit the Liberty `server.env` file with the following configuration: + + JAVA_HOME=/etc/alternatives/jre_17 + JVM_ARGS="--add-exports=jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED" + +* Where: The `--add-exports` JVM argument is necessary because in Java 17, the Java module system restricts access to internal packages. The PKCS#11 implementation requires access to classes in the `sun.security.pkcs11` package, which is part of the `jdk.crypto.cryptoki` module. This argument explicitly allows Liberty to access these internal classes that are needed for the HSM integration to work properly. +** Similar JVM arguments might be required for other Java versions that use the module system (Java 9 and later). The specific arguments might vary slightly depending on the Java version. + +. Configure any JVM options that are required for your specific HSM compatibility. For example, to disable unsupported algorithms, add the list of algorithms to the Liberty `jvm.options` file: + + -Djdk.tls.disabledAlgorithms=RSASSA-PSS,RSAPSS + +. Start the Liberty server and verify that the HSM integration is working correctly. + +== Troubleshooting +If you encounter issues with your HSM integration, consider enabling PKCS#11 debug logging by adding to jvm.options: + + -Djava.security.debug=sunpkcs11,pkcs11 + +For specific HSM-related issues, consult your HSM vendor's documentation and support resources. + +== Java version considerations +While these steps were written and tested with Semeru Java 17, they should be applicable to other Java versions with potential minor adjustments: + +* The module-related JVM arguments (`--add-exports`) may vary depending on the Java version +* The exact path to the Java installation will differ +* Security provider configurations may have slight differences between Java versions + +== Related articles +- link:https://openliberty.io/docs/latest/reference/config/server-configuration-overview.html[Server configuration overview] +- link:https://openliberty.io/docs/latest/reference/feature/feature-overview.html[Feature Overview] +- link:https://www.ibm.com/support/pages/enabling-hardware-cryptography-liberty-zos-using-java-11-java-17-or-java-21?view=full[Enabling hardware cryptography for Liberty for z/OS using Java 11, Java 17, or Java 21] + + + +== Acknowledgements +We would like to sincerely thank a valued customer who, while choosing to remain anonymous, generously shared his expertise with us. Access to this level of specialized hardware and configuration experience is rare. Through collaboration, persistence, and thoughtful experimentation, he helped validate solutions and provided the practical steps documented here. +His willingness to share these insights will benefit many others in the WAS community facing similar challenges. We deeply appreciate his generosity and the meaningful impact of his contribution. \ No newline at end of file diff --git a/posts/ja/2026-04-21-26.0.0.4.adoc b/posts/ja/2026-04-21-26.0.0.4.adoc old mode 100644 new mode 100755 From 77ddc1a099c0ea49a2546fb50fe09376050378ff Mon Sep 17 00:00:00 2001 From: Siaa Gor Date: Fri, 12 Jun 2026 14:20:09 -0400 Subject: [PATCH 11/14] sync with staging branch Signed-off-by: Siaa Gor --- ...re-cryptography-for-liberty-for-linux.adoc | 172 ------------------ posts/ja/2026-04-21-26.0.0.4.adoc | 0 2 files changed, 172 deletions(-) delete mode 100644 posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc mode change 100755 => 100644 posts/ja/2026-04-21-26.0.0.4.adoc diff --git a/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc b/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc deleted file mode 100644 index 7b5c9f16be..0000000000 --- a/posts/2026-05-11-configuration-steps-for-hardware-cryptography-for-liberty-for-linux.adoc +++ /dev/null @@ -1,172 +0,0 @@ ---- -layout: post -title: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17" -# Do NOT change the categories section -categories: blog -author_picture: https://avatars0.githubusercontent.com/una-tapa -author_github: https://github.com/una-tapa -seo-title: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 -seo-description: Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security. -blog_description: "Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17. The configuration integrates Liberty with hardware security modules (HSM) for enhanced security." -open-graph-image: https://openliberty.io/img/twitter_card.jpg -open-graph-image-alt: Open Liberty Logo -additional_authors: -- name: Laura Cowen - github: https://github.com/lauracowen - image: https://avatars3.githubusercontent.com/lauracowen -- name: Jessie Zhou - github: https://github.com/RoastedMilkTea - image: https://avatars0.githubusercontent.com/RoastedMilkTea ---- -= Enabling hardware cryptography for Liberty for Linux on distributed environment with Semeru Java 17 -Hiroko Takamiya -:imagesdir: / -:url-prefix: -:url-about: / -//Blank line here is necessary before starting the body of the post. - -Hardware cryptography, through hardware security modules (HSM), provides enhanced security for applications that are running on Liberty on distributed Linux environments. The following instructions to integrate Liberty on distributed Linux with hardware cryptographic devices were successfully tested by a customer who was using a Thales Luna HSM with Semeru Java 17. These instructions should also be applicable to other Java versions; see <> for potential modifications needed. The configuration should be adaptable to other hardware security modules that support the PKCS#11 interface. - -## Example use cases - -The HSM integration with Liberty enables enhanced security for various cryptographic operations. Here are some example use cases: - -- **Secure Web Services with HSM-Protected Keys**: Liberty serves as a secure web service endpoint using TLS with the server’s private key stored in the HSM. The TLS handshake uses the HSM-protected key, ensuring the private key never leaves the secure hardware boundary, even if the Liberty server is compromised. -- **Mutual TLS Authentication for Microservices**: Liberty stores client certificates in the HSM for outbound connections requiring mutual TLS. The HSM handles the cryptographic operations for client authentication, protecting the private key material. -- **Digital Signature Services**: Applications can use the HSM to sign data (like JSON Web Tokens) with keys that are generated and stored within the HSM. The signing operation occurs inside the hardware, maintaining the integrity of the signing process. -- **Secure Data Encryption and Decryption**: Encryption keys are securely stored in the HSM, and encryption/decryption operations are performed by the hardware, providing an additional layer of security for sensitive data. -- **Certificate Authority Operations**: Organizations running their own CA can store root and intermediate certificate private keys in the HSM, with certificate signing operations performed within the hardware to ensure the highest level of protection for these critical security assets. - -== Steps -. Install HSM client libraries that enable communication between your application and the HSM. - -. Configure authentication between the Linux server and the HSM to establish secure communication. -Create and register a self-signed client certificate, establishing mutual TLS as the authentication method. - -. Create a PKCS#11 configuration file that defines how Java will interact with the HSM through the PKCS#11 interface. -+ -For example, the following PKCS11Config.cfg file was created with assistance from Luna Support and saved in the Liberty server configuration directory: - - description = Thales Luna HSM/PKCS11 Configuration - name = PKCS11Config - library = /opt/safenet/lunaclient/lib/libCryptoki2_64.so - slot = 0 - showInfo = true - attributes(*,CKO_SECRET_KEY,*) = { - CKA_CLASS=4 - CKA_PRIVATE= true - CKA_KEY_TYPE = 21 - CKA_SENSITIVE= true - CKA_ENCRYPT= true - CKA_DECRYPT= true - CKA_WRAP= true - CKA_UNWRAP= true - } - attributes(*,CKO_PRIVATE_KEY,*) = { - CKA_CLASS=3 - CKA_LABEL=true - CKA_PRIVATE = true - CKA_DECRYPT=true - CKA_SIGN=true - CKA_UNWRAP=true - } - attributes(*,CKO_PUBLIC_KEY,*) = { - CKA_CLASS=2 - CKA_LABEL=true - CKA_ENCRYPT = true - CKA_VERIFY=true - CKA_WRAP=true - } - -. Update the Java security configuration to include the PKCS#11 provider. + -+ -For example, create a `java.security` file in the same directory as the `server.xml` file with the following content to add the SunPKCS11 provider pointing to the `PKCS11Config.cfg` file: - - security.provider.1=SunPKCS11 ${server.config.dir}/PKCS11Config.cfg - security.provider.2=SUN - security.provider.3=SunRsaSign - security.provider.4=SunEC - security.provider.5=SunJSSE - security.provider.6=SunJCE - security.provider.7=SunJGSS - security.provider.8=SunSASL - security.provider.9=XMLDSig - security.provider.10=SunPCSC - security.provider.11=JdkLDAP - security.provider.12=JdkSASL - -+ -Also create, a `jvm.options` file in the same directory with the following content to point to the custom `java.security` file: - - -Djava.security.properties=${server.config.dir}/java.security - -. Set up a hardware-based keystore/truststore, a file-based keystore/truststore, or both: -* For a HSM (hardware-based keystore/truststore), create or import the necessary certificates for your application's security requirements. (i.e. TLS server certificate and client certificates for various use cases). -* For a file-based keystore/truststore, create a standard file-based truststore to hold trusted CA certificates. For example, a traditional PKCS12 file-based keystore can be created to serve as the general "truststore" in Liberty, which includes the CA certificates to be trusted. - -. Edit the Liberty `server.xml` file to use the HSM-backed keystore, the file-based truststore, or both by adding the relevant configuration snippets: - - - - - - - - - - transportSecurity-1.0 - - ssl-1.0 - -. Configure the Liberty server environment variables. -+ -For example, edit the Liberty `server.env` file with the following configuration: - - JAVA_HOME=/etc/alternatives/jre_17 - JVM_ARGS="--add-exports=jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED" - -* Where: The `--add-exports` JVM argument is necessary because in Java 17, the Java module system restricts access to internal packages. The PKCS#11 implementation requires access to classes in the `sun.security.pkcs11` package, which is part of the `jdk.crypto.cryptoki` module. This argument explicitly allows Liberty to access these internal classes that are needed for the HSM integration to work properly. -** Similar JVM arguments might be required for other Java versions that use the module system (Java 9 and later). The specific arguments might vary slightly depending on the Java version. - -. Configure any JVM options that are required for your specific HSM compatibility. For example, to disable unsupported algorithms, add the list of algorithms to the Liberty `jvm.options` file: - - -Djdk.tls.disabledAlgorithms=RSASSA-PSS,RSAPSS - -. Start the Liberty server and verify that the HSM integration is working correctly. - -== Troubleshooting -If you encounter issues with your HSM integration, consider enabling PKCS#11 debug logging by adding to jvm.options: - - -Djava.security.debug=sunpkcs11,pkcs11 - -For specific HSM-related issues, consult your HSM vendor's documentation and support resources. - -== Java version considerations -While these steps were written and tested with Semeru Java 17, they should be applicable to other Java versions with potential minor adjustments: - -* The module-related JVM arguments (`--add-exports`) may vary depending on the Java version -* The exact path to the Java installation will differ -* Security provider configurations may have slight differences between Java versions - -== Related articles -- link:https://openliberty.io/docs/latest/reference/config/server-configuration-overview.html[Server configuration overview] -- link:https://openliberty.io/docs/latest/reference/feature/feature-overview.html[Feature Overview] -- link:https://www.ibm.com/support/pages/enabling-hardware-cryptography-liberty-zos-using-java-11-java-17-or-java-21?view=full[Enabling hardware cryptography for Liberty for z/OS using Java 11, Java 17, or Java 21] - - - -== Acknowledgements -We would like to sincerely thank a valued customer who, while choosing to remain anonymous, generously shared his expertise with us. Access to this level of specialized hardware and configuration experience is rare. Through collaboration, persistence, and thoughtful experimentation, he helped validate solutions and provided the practical steps documented here. -His willingness to share these insights will benefit many others in the WAS community facing similar challenges. We deeply appreciate his generosity and the meaningful impact of his contribution. \ No newline at end of file diff --git a/posts/ja/2026-04-21-26.0.0.4.adoc b/posts/ja/2026-04-21-26.0.0.4.adoc old mode 100755 new mode 100644 From c242e77c46c3260c99dbdb549865c0c787e51821 Mon Sep 17 00:00:00 2001 From: navaneethsnair1 Date: Thu, 25 Jun 2026 11:55:25 +0530 Subject: [PATCH 12/14] 26.0.0.7-beta blog first draft --- posts/2026-06-30-26.0.0.7-beta.adoc | 359 ++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 posts/2026-06-30-26.0.0.7-beta.adoc diff --git a/posts/2026-06-30-26.0.0.7-beta.adoc b/posts/2026-06-30-26.0.0.7-beta.adoc new file mode 100644 index 0000000000..f43bca6c74 --- /dev/null +++ b/posts/2026-06-30-26.0.0.7-beta.adoc @@ -0,0 +1,359 @@ +--- +layout: post +title: "Netty‑based HTTP transport in 26.0.0.7-beta" +# Do NOT change the categories section +categories: blog +author_picture: https://avatars3.githubusercontent.com/navaneethsnair1 +author_github: https://github.com/navaneethsnair1 +seo-title: "Netty‑based HTTP transport in 26.0.0.7-beta - OpenLiberty.io" +seo-description: This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful repositories, enhanced query restrictions, and the @First annotation. It also adds configuration-based control over MicroProfile Health REST endpoints when file-based health checks are enabled. +blog_description: This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful repositories, enhanced query restrictions, and the @First annotation. It also adds configuration-based control over MicroProfile Health REST endpoints when file-based health checks are enabled. +open-graph-image: https://openliberty.io/img/twitter_card.jpg +open-graph-image-alt: Open Liberty Logo +--- += Netty‑based HTTP transport in 26.0.0.7-beta +Navaneeth S Nair +:imagesdir: / +:url-prefix: +:url-about: / +//Blank line here is necessary before starting the body of the post. + +This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful repositories, enhanced query restrictions, and the @First annotation. It also adds configuration-based control over MicroProfile Health REST endpoints when file-based health checks are enabled. + +// // // // // // // // +// Change the RELEASE_SUMMARY to an introductory paragraph. This sentence is really +// important because it is supposed to grab the readers attention. Make sure to keep the blank lines +// +// Throughout the doc, replace RELEASE_VERSION with the version number of Open Liberty, eg: 22.0.0.2-beta +// // // // // // // // +The link:{url-about}[Open Liberty] 26.0.0.7-beta includes the following beta features (along with link:{url-prefix}/docs/latest/reference/feature/feature-overview.html[all GA features]): + +* <> +* <> + +// // // // // // // // +// In the preceding section: +// Change SUB_FEATURE_TITLE to the feature that is included in this release and +// change the SUB_TAG_1/2/3 to the heading tags +// +// However if there's only 1 new feature, delete the previous section and change it to the following sentence: +// "The link:{url-about}[Open Liberty] RELEASE_VERSION includes SUB_FEATURE_TITLE" +// // // // // // // // + +See also link:{url-prefix}/blog/?search=beta&key=tag[previous Open Liberty beta blog posts]. + +// // // // DO NOT MODIFY THIS COMMENT BLOCK // // // // +// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/34948 +// Contact/Reviewer: njr-11 +// // // // // // // // +[#jakarta_data] +== Preview of some Jakarta Data 1.1 M3 capability + +The beta release previews some new capability at the Jakarta Data 1.1 Milestone 3 level: stateful repositories, the `@First` annotation, `Restriction` parameters on repository `@Find` and `@Delete` methods, `Constraint` subtype parameters on repository `@Find` and `@Delete` methods. Also included in prior betas are: retrieving a subset or projection of entity attributes and the `@Is` annotation. + +Previously, parameter-based `@Find` and `@Delete` methods had no way to filter on conditions other than equality. This limitation can now be overcome by typing the repository method parameter with a Constraint subtype or indicating the Constraint subtype by using the `@Is` annotation. Or, the repository method can include a special parameter of type `Restriction`, and the application can supply one or more restrictions at run time when it starts the repository method. Also, before this point, all Jakarta Data repositories were stateless, in that they operate without externalizing a persistence context to the application. Now, you can define a repository as stateful by using the repository lifecycle method annotations in the `jakarta.data.repository.stateful` package, and the repository operates with a persistence context. Also, repository `Find` methods cannot enforce returning only the first result or the first few results. That capability is now available with the `First` annotation. + +In Jakarta Data, you write simple Java objects that are called *Entities* to represent data, and interfaces that are called *Repositories* to define operations on data. You inject a Repository into your application and use it. The implementation of the Repository is automatically provided for you! + +Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. + +An entity class can be: + +* annotated with `jakarta.persistence.Entity` and related annotations from Jakarta Persistence. +* a Java class without entity annotations, in which case the primary key is inferred from an entity property named `id` or ending with `Id`. Entity property named `version` designates an automatically incremented version column. + +Following shows an example of a simple entity. + +[source,java] +---- +@Entity +public class Product { + @Id + public long id; + + public String name; + + public boolean onSale; + + public double price; + + public double weight; +} +---- + +After you define the entity to represent the data, it is usually helpful to have your IDE generate a static metamodel class for it. By convention, static metamodel classes begin with the underscore character, followed by the entity name. Because this beta is being made available well before the release of Jakarta Data 1.1, we cannot expect IDEs for this generation yet. However, we can provide the static metamodel class that an IDE would be expected to generate for the `Product` entity: + +[source,java] +---- +@StaticMetamodel(Product.class) +public interface _Product { + String ID = "id"; + String NAME = "name"; + String ONSALE = "onSale"; + String PRICE = "price"; + String WEIGHT = "weight"; + + NumericAttribute id = NumericAttribute.of( + Product.class, ID, long.class); + TextAttribute name = TextAttribute.of( + Product.class, NAME); + BooleanAttribute onSale = BooleanAttribute.of( + Product.class, ONSALE, boolean.class); + NumericAttribute price = NumericAttribute.of( + Product.class, PRICE, double.class); + NumericAttribute weight = NumericAttribute.of( + Product.class, WEIGHT, double.class); +} +---- + +The first half of the static metamodel class includes constants for each of the entity attribute names so that you don't need to otherwise hardcode string values into your application. The second half of the static metamodel class provides a special instance for each entity attribute, from which you can build restrictions and sorting to apply to queries at run time. You can do many powerful things with these repository queries. + +Built-in interfaces like BasicRepository and CrudRepository can be inherited to add general-purpose methods for inserting, updating, deleting, and querying entities. When a stateful repository is composed such as the following, the built-in interface `DataRepository` can be inherited. With this interface, you can define at least one stateful repository method by using the `Detach`, `Merge`, `Persist`, `Refresh`, or `Remove` annotations. After the repository is made stateful, the repository finds methods that you define to return entities that also operate within a persistence context. + +[source,java] +---- +@Repository(dataStore = "java:app/jdbc/my-example-data") +public interface Products extends DataRepository { + + // Filtering is pre-defined at development time by the @Is annotation, + @Find + @First + @OrderBy(_Product.PRICE) + @OrderBy(_Product.NAME) + Optional leastExpensiveUpTo( + @By(_Product.PRICE) @Is(AtMost.class) double maxPrice, + @By(_Product.NAME) @Is(Like.class) String namePattern); + + // Constraint types, such as Like, can also pre-define filtering. + // Allow additional filtering at run time by including a Restriction, + @Find + Page named(@By(_Product.NAME) Like namePattern, + Restriction filter, + Order sorting, + PageRequest pageRequest); + + @Persist + @Transactional + void persist(Product product); + + // Retrieve a single entity attribute, identified by @Select, + @Find + @Select(_Product.PRICE) + Optional priceOf(@By(_Product.ID) long productNum); + + // Retrieve multiple entity attributes as a Java record, + @Find + @Select(_Product.WEIGHT) + @Select(_Product.NAME) + Optional weightAndNameOf(@By(_Product.ID) long productNum); + + static record WeightInfo(double itemWeight, String itemName) {} +} +---- + +Following is an example of using the stateful repository and static metamodel. + +[source,java] +---- +@DataSourceDefinition(name = "java:app/jdbc/my-example-data", + className = "org.postgresql.xa.PGXADataSource", + databaseName = "ExampleDB", + serverName = "localhost", + portNumber = 5432, + user = "${example.database.user}", + password = "${example.database.password}") +public class MyServlet extends HttpServlet { + @Inject + Products products; + + @Inject + UserTransaction tx; + + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + + // Persist: + Product prod = Product.of(1, name, false, 99.99, 10.5); + products.persist(prod); + + // Filter by supplying values only: + tx.begin(); + products.leastExpensiveUpTo(1000.00, "%computer%") + .ifPresent(p -> { + p.setOnSale(false); + p.setPrice(p.getPrice() + 50.00); + }); + tx.commit(); + + // Compute filtering at run time, + Page page1 = products.named( + Like.suffix("printer"), + Restrict.all(_Product.price.times(taxRate).plus(shipping).lessThan(250.0), + _Product.weight.times(kgToPounds).between(10.0, 20.0)), + Order.by(_Product.price.desc(), + _Product.name.asc(), + _Product.id.asc()), + PageRequest.ofSize(10)); + + // Find one entity attribute: + price = products.priceOf(prod.id).orElseThrow(); + + // Find multiple entity attributes as a Java record: + products.weightAndNameOf(prod.id).ifPresent(info -> + System.out.println(info.itemName() + " weighs " + + info.itemWeight() + " kg.") + ); + } +} +---- + +To learn more about this feature, see the following resources: + +* link:https://jakarta.ee/specifications/data/1.1/apidocs[Jakarta Data 1.1 API Javadoc] +* link:https://jakarta.ee/specifications/data/1.1/[Jakarta Data 1.1 overview page] +* Maven coordinates for Data 1.1 Milestone 3: + +[source,xml] +---- + + jakarta.data + jakarta.data-api + 1.1.0-M3 + +---- + + +// DO NOT MODIFY THIS LINE. + + +// // // // DO NOT MODIFY THIS COMMENT BLOCK // // // // +// Blog issue: https://github.com/OpenLiberty/open-liberty/issues/34987 +// Contact/Reviewer: pgunapal +// // // // // // // // +[#mpHealth_4_0] +== Disabling mpHealth-4.0 REST endpoints when file-based health checks are enabled + +The `mpHealth-4.0` feature enables a MicroProfile Health 4.0 runtime for the OpenLiberty server. This runtime supports file-based health check mechanism as an alternative health check strategy to the `/health/` REST endpoints. When the file-based health check mechanism is enabled, you can now disable the health check `/health/started, /health/live, /health/ready` REST endpoints, with server configuration attributes. + +Previously, when file‑based health checks were enabled, the REST‑based MicroProfile Health endpoints were still registered and accessible. This behavior was often redundant for Kubernetes deployments that rely on file‑based health checks, where users typically configure probes by using the exec strategy rather than httpGet or gRPC. In these scenarios, the REST health endpoints are not used. + +To address this redundancy, the beta release introduces a new optional mpHealth server configuration attribute that allows REST health endpoints to be disabled when file‑based health checks are enabled. + +The `mpHealth-4.0` feature adds a new optional `enableEndpoints="false"` attribute to the `mpHealth` server configuration element in `server.xml`. An equivalent environment variable, `MP_HEALTH_ENABLE_ENDPOINTS=false`, is also supported. When this option is set to `false` and file-based health checks are enabled, the server does not register or expose the MicroProfile Health REST endpoints (`/health, /health/live, /health/ready, /health/started`). File-based health checks can be enabled with the `checkInterval` configuration attribute or the `MP_HEALTH_CHECK_INTERVAL` environment variable. Requests to these endpoints return 404 – Not Found. + +If both the environment variable and server.xml configuration are specified, the server.xml setting takes precedence at runtime. + +server.xml +[source,xml] +---- + + + mpHealth-4.0 + + + + + ... + +---- + +If either the `enableEndpoints` configuration attribute or the MP_HEALTH_ENABLE_ENDPOINTS environment variable is NOT set, the default value is true, and the health check REST endpoints are enabled and exposed. + +*Note*: This capability is supported only when the file‑based health check mechanism is enabled. If file-based health checks are not enabled and the new `enableEndpoints` configuration attribute or environment variable is specified, a warning message is logged. The REST health endpoints remain enabled by default. + +For more information, see the link:{url-prefix}/docs/latest/health-check-microservices.html[documentation]. + +// DO NOT MODIFY THIS LINE. + +[#run] +== Try it now + +To try out these features, update your build tools to pull the Open Liberty All Beta Features package instead of the main release. The beta works with Java SE 21, Java SE 17, Java SE 11, and Java SE 8. +// // // // // // // // +// In the preceding section: +// Check if a new non-LTS Java SE version is supported that needs to be added to the list (21, 17, 11, and 8 are LTS and will remain for a while) +// https://openliberty.io/docs/latest/java-se.html +// +// In the following section: +// Check if a new MicroProfile or Jakarta version is in beta that could replace the example values in the codeblock +// // // // // // // // + +If you're using link:{url-prefix}/guides/maven-intro.html[Maven], you can install the All Beta Features package using: + +[source,xml] +---- + + io.openliberty.tools + liberty-maven-plugin + 3.12.0 + + + io.openliberty.beta + openliberty-runtime + 26.0.0.7-beta + zip + + + +---- + +You must also add dependencies to your pom.xml file for the beta version of the APIs that are associated with the beta features that you want to try. For example, the following block adds dependencies for two example beta APIs: + +[source,xml] +---- + + org.example.spec + exampleApi + 7.0 + pom + provided + + + example.platform + example.example-api + 11.0.0 + provided + +---- + +Or for link:{url-prefix}/guides/gradle-intro.html[Gradle]: + +[source,gradle] +---- +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.0' + } +} +apply plugin: 'liberty' +dependencies { + libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[26.0.0.7-beta,)' +} +---- +// // // // // // // // +// In the preceding section: +// Replace the Maven `3.11.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-maven-plugin +// Replace the Gradle `3.9.5` with the latest version of the plugin: https://search.maven.org/artifact/io.openliberty.tools/liberty-gradle-plugin +// TODO: Update GHA to automatically do the above. If the maven.org is problematic, then could fallback to using the GH Releases for the plugins +// // // // // // // // + +Or if you're using link:{url-prefix}/docs/latest/container-images.html[container images]: + +[source] +---- +FROM icr.io/appcafe/open-liberty:beta +---- + +Or take a look at our link:{url-prefix}/downloads/#runtime_betas[Downloads page]. + +If you're using link:https://plugins.jetbrains.com/plugin/14856-liberty-tools[IntelliJ IDEA], link:https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext[Visual Studio Code] or link:https://marketplace.eclipse.org/content/liberty-tools[Eclipse IDE], you can also take advantage of our open source link:{url-prefix}/docs/latest/develop-liberty-tools.html[Liberty developer tools] to enable effective development, testing, debugging and application management all from within your IDE. + +For more information on using a beta release, refer to the link:{url-prefix}/docs/latest/installing-open-liberty-betas.html[Installing Open Liberty beta releases] documentation. + +[#feedback] +== We welcome your feedback + +Let us know what you think on link:https://groups.io/g/openliberty[our mailing list]. If you hit a problem, link:https://stackoverflow.com/questions/tagged/open-liberty[post a question on StackOverflow]. If you hit a bug, link:https://github.com/OpenLiberty/open-liberty/issues[please raise an issue]. From c768e97fce78d39b4597ff8fe9d0d7332d631049 Mon Sep 17 00:00:00 2001 From: navaneethsnair1 Date: Thu, 25 Jun 2026 19:48:03 +0530 Subject: [PATCH 13/14] updates to 26.0.0.7-beta blog -2nd draft --- posts/2026-06-30-26.0.0.7-beta.adoc | 54 +++++++++++++++++++---------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/posts/2026-06-30-26.0.0.7-beta.adoc b/posts/2026-06-30-26.0.0.7-beta.adoc index f43bca6c74..9f8ac95e07 100644 --- a/posts/2026-06-30-26.0.0.7-beta.adoc +++ b/posts/2026-06-30-26.0.0.7-beta.adoc @@ -1,17 +1,17 @@ --- layout: post -title: "Netty‑based HTTP transport in 26.0.0.7-beta" +title: "Jakarta Data 1.1 Beta Features and MicroProfile Health Endpoint Controls in 26.0.0.7-beta" # Do NOT change the categories section categories: blog author_picture: https://avatars3.githubusercontent.com/navaneethsnair1 author_github: https://github.com/navaneethsnair1 -seo-title: "Netty‑based HTTP transport in 26.0.0.7-beta - OpenLiberty.io" +seo-title: "Jakarta Data 1.1 Beta Features and MicroProfile Health Endpoint Controls in 26.0.0.7-beta - OpenLiberty.io" seo-description: This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful repositories, enhanced query restrictions, and the @First annotation. It also adds configuration-based control over MicroProfile Health REST endpoints when file-based health checks are enabled. blog_description: This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful repositories, enhanced query restrictions, and the @First annotation. It also adds configuration-based control over MicroProfile Health REST endpoints when file-based health checks are enabled. open-graph-image: https://openliberty.io/img/twitter_card.jpg open-graph-image-alt: Open Liberty Logo --- -= Netty‑based HTTP transport in 26.0.0.7-beta += Jakarta Data 1.1 Beta Features and MicroProfile Health Endpoint Controls in 26.0.0.7-beta Navaneeth S Nair :imagesdir: / :url-prefix: @@ -28,7 +28,7 @@ This beta introduces new Jakarta Data 1.1 beta capabilities, including stateful // // // // // // // // The link:{url-about}[Open Liberty] 26.0.0.7-beta includes the following beta features (along with link:{url-prefix}/docs/latest/reference/feature/feature-overview.html[all GA features]): -* <> +* <> * <> // // // // // // // // @@ -47,22 +47,36 @@ See also link:{url-prefix}/blog/?search=beta&key=tag[previous Open Liberty beta // Contact/Reviewer: njr-11 // // // // // // // // [#jakarta_data] -== Preview of some Jakarta Data 1.1 M3 capability +== Preview of some Jakarta Data 1.1 M3 capabilities -The beta release previews some new capability at the Jakarta Data 1.1 Milestone 3 level: stateful repositories, the `@First` annotation, `Restriction` parameters on repository `@Find` and `@Delete` methods, `Constraint` subtype parameters on repository `@Find` and `@Delete` methods. Also included in prior betas are: retrieving a subset or projection of entity attributes and the `@Is` annotation. +The beta release previews some new capabilities at the Jakarta Data 1.1 Milestone 3 level: -Previously, parameter-based `@Find` and `@Delete` methods had no way to filter on conditions other than equality. This limitation can now be overcome by typing the repository method parameter with a Constraint subtype or indicating the Constraint subtype by using the `@Is` annotation. Or, the repository method can include a special parameter of type `Restriction`, and the application can supply one or more restrictions at run time when it starts the repository method. Also, before this point, all Jakarta Data repositories were stateless, in that they operate without externalizing a persistence context to the application. Now, you can define a repository as stateful by using the repository lifecycle method annotations in the `jakarta.data.repository.stateful` package, and the repository operates with a persistence context. Also, repository `Find` methods cannot enforce returning only the first result or the first few results. That capability is now available with the `First` annotation. +* Stateful repositories +* The `@First` annotation +* `Restriction` parameters on repository `@Find` and `@Delete` methods +* `Constraint` subtype parameters on repository `@Find` and `@Delete` methods + +Also included in prior betas are: + +* Retrieving a subset or projection of entity attributes +* The `@Is` annotation + +Previously, parameter-based `@Find` and `@Delete` methods had no way to filter on conditions other than equality. This limitation can now be overcome by typing the repository method parameter with a Constraint subtype or by indicating the Constraint subtype using the `@Is` annotation. Alternatively, the repository method can include a special parameter of type `Restriction`, allowing the application to supply one or more restrictions at run time when it invokes the repository method. + +Prior to this release, all Jakarta Data repositories were stateless, operating without externalizing a persistence context to the application. Now, you can define a repository as stateful by using the repository lifecycle method annotations in the `jakarta.data.repository.stateful` package, enabling the repository to operate with a persistence context. + +Previously, repository `Find` methods could not enforce returning only the first result or the first few results. That capability is now available with the `@First` annotation. In Jakarta Data, you write simple Java objects that are called *Entities* to represent data, and interfaces that are called *Repositories* to define operations on data. You inject a Repository into your application and use it. The implementation of the Repository is automatically provided for you! -Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table and the entity properties (public methods and fields of the entity class) generally correspond to the columns of the table. +Start by defining an entity class that corresponds to your data. With relational databases, the entity class corresponds to a database table. The entity properties, which include the public methods and fields of the entity class, generally correspond to the columns of the table. An entity class can be: * annotated with `jakarta.persistence.Entity` and related annotations from Jakarta Persistence. * a Java class without entity annotations, in which case the primary key is inferred from an entity property named `id` or ending with `Id`. Entity property named `version` designates an automatically incremented version column. -Following shows an example of a simple entity. +The following shows an example of a simple entity: [source,java] ---- @@ -106,9 +120,10 @@ public interface _Product { } ---- -The first half of the static metamodel class includes constants for each of the entity attribute names so that you don't need to otherwise hardcode string values into your application. The second half of the static metamodel class provides a special instance for each entity attribute, from which you can build restrictions and sorting to apply to queries at run time. You can do many powerful things with these repository queries. +The first half of the static metamodel class includes constants for each of the entity attribute names so that you don't need to otherwise hardcode string values into your application. The second half of the static metamodel class provides a special instance for each entity attribute, from which you can build restrictions and sorting to apply to queries at run time. These repository queries enable powerful and flexible data operations. -Built-in interfaces like BasicRepository and CrudRepository can be inherited to add general-purpose methods for inserting, updating, deleting, and querying entities. When a stateful repository is composed such as the following, the built-in interface `DataRepository` can be inherited. With this interface, you can define at least one stateful repository method by using the `Detach`, `Merge`, `Persist`, `Refresh`, or `Remove` annotations. After the repository is made stateful, the repository finds methods that you define to return entities that also operate within a persistence context. +Built-in interfaces like `BasicRepository` and `CrudRepository` can be extended to add general-purpose methods for inserting, updating, deleting, and querying entities. +To compose a stateful repository, extend the built-in `DataRepository` interface. This interface allows you to define at least one stateful repository method using the `@Detach`, `@Merge`, `@Persist`, `@Refresh`, or `@Remove` annotations. Once the repository is stateful, any find methods you define will return entities that operate within a persistence context. [source,java] ---- @@ -233,17 +248,20 @@ To learn more about this feature, see the following resources: [#mpHealth_4_0] == Disabling mpHealth-4.0 REST endpoints when file-based health checks are enabled -The `mpHealth-4.0` feature enables a MicroProfile Health 4.0 runtime for the OpenLiberty server. This runtime supports file-based health check mechanism as an alternative health check strategy to the `/health/` REST endpoints. When the file-based health check mechanism is enabled, you can now disable the health check `/health/started, /health/live, /health/ready` REST endpoints, with server configuration attributes. +The mpHealth-4.0 feature enables a MicroProfile Health 4.0 runtime for the Open Liberty server. This runtime supports a file-based health check mechanism as an alternative to the `/health/` REST endpoints. When the file-based health check mechanism is enabled, you can now disable the `/health/started`, `/health/live`, and `/health/ready` REST endpoints using server configuration attributes. + +Previously, when file-based health checks were enabled, the REST-based MicroProfile Health endpoints were still registered and accessible. This behavior was often redundant for Kubernetes deployments that rely on file-based health checks, where users typically configure probes using the `exec` strategy rather than `httpGet` or `gRPC`. In these scenarios, the REST health endpoints are not used. + +To address this redundancy, the beta release introduces a new optional `mpHealth` server configuration attribute that allows REST health endpoints to be disabled when file-based health checks are enabled. -Previously, when file‑based health checks were enabled, the REST‑based MicroProfile Health endpoints were still registered and accessible. This behavior was often redundant for Kubernetes deployments that rely on file‑based health checks, where users typically configure probes by using the exec strategy rather than httpGet or gRPC. In these scenarios, the REST health endpoints are not used. +The `mpHealth-4.0` feature adds a new optional `enableEndpoints="false"` attribute to the `mpHealth` server configuration element in `server.xml` file. An equivalent environment variable, `MP_HEALTH_ENABLE_ENDPOINTS=false`, is also supported. -To address this redundancy, the beta release introduces a new optional mpHealth server configuration attribute that allows REST health endpoints to be disabled when file‑based health checks are enabled. +When this option is set to `false` and file-based health checks are enabled, the server does not register or expose the MicroProfile Health REST endpoints (`/health, /health/live, /health/ready, /health/started`). Requests to these endpoints return '404 Not Found' response. -The `mpHealth-4.0` feature adds a new optional `enableEndpoints="false"` attribute to the `mpHealth` server configuration element in `server.xml`. An equivalent environment variable, `MP_HEALTH_ENABLE_ENDPOINTS=false`, is also supported. When this option is set to `false` and file-based health checks are enabled, the server does not register or expose the MicroProfile Health REST endpoints (`/health, /health/live, /health/ready, /health/started`). File-based health checks can be enabled with the `checkInterval` configuration attribute or the `MP_HEALTH_CHECK_INTERVAL` environment variable. Requests to these endpoints return 404 – Not Found. +File-based health checks can be enabled with the `checkInterval` configuration attribute or the `MP_HEALTH_CHECK_INTERVAL` environment variable. -If both the environment variable and server.xml configuration are specified, the server.xml setting takes precedence at runtime. +If both the environment variable and `server.xml` file configuration are specified, the `server.xml` setting takes precedence at runtime. -server.xml [source,xml] ---- @@ -257,7 +275,7 @@ server.xml ---- -If either the `enableEndpoints` configuration attribute or the MP_HEALTH_ENABLE_ENDPOINTS environment variable is NOT set, the default value is true, and the health check REST endpoints are enabled and exposed. +If either the `enableEndpoints` configuration attribute or the `MP_HEALTH_ENABLE_ENDPOINTS` environment variable is not set, the default value is `true`, and the health check REST endpoints are enabled and exposed. *Note*: This capability is supported only when the file‑based health check mechanism is enabled. If file-based health checks are not enabled and the new `enableEndpoints` configuration attribute or environment variable is specified, a warning message is logged. The REST health endpoints remain enabled by default. From 5c5544f9b25d339e959151b6660025178cb59971 Mon Sep 17 00:00:00 2001 From: navaneethsnair1 Date: Mon, 29 Jun 2026 10:35:56 +0530 Subject: [PATCH 14/14] 3rd draft to 26.0.0.7-beta blog --- blog_tags.json | 10 +++++----- posts/2026-06-30-26.0.0.7-beta.adoc | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/blog_tags.json b/blog_tags.json index 22df8d8dbe..bb9e1531b4 100644 --- a/blog_tags.json +++ b/blog_tags.json @@ -2,7 +2,7 @@ "blog_tags": [ { "name": "announcements", - "posts": ["26.0.0.6", "26.0.0.6-beta", + "posts": ["26.0.0.7-beta", "26.0.0.6", "26.0.0.6-beta", "26.0.0.5", "26.0.0.5-beta", "26.0.0.4", "26.0.0.4-beta", "26.0.0.3", "26.0.0.3-beta", @@ -103,7 +103,7 @@ "featured": "true" },{ "name": "microprofile", - "posts": ["26.0.0.4", "26.0.0.3", + "posts": ["26.0.0.7-beta", "26.0.0.4", "26.0.0.3", "25.0.0.8", "25.0.0.7-beta", "25.0.0.6", "25.0.0.6-beta", "25.0.0.5", "25.0.0.4", @@ -201,7 +201,7 @@ }, { "name": "release", - "posts": ["26.0.0.6", "26.0.0.6-beta", + "posts": ["26.0.0.7-beta", "26.0.0.6", "26.0.0.6-beta", "26.0.0.5", "26.0.0.5-beta", "26.0.0.4", "26.0.0.4-beta", "26.0.0.3", "26.0.0.3-beta", @@ -283,7 +283,7 @@ }, { "name": "beta", - "posts": ["26.0.0.6-beta", "26.0.0.5-beta", "26.0.0.4-beta", + "posts": ["26.0.0.7-beta", "26.0.0.6-beta", "26.0.0.5-beta", "26.0.0.4-beta", "26.0.0.3-beta", "26.0.0.2-beta", "26.0.0.1-beta", "mcp-standalone-blog", "25.0.0.12-beta", "25.0.0.11-beta", @@ -437,7 +437,7 @@ }, { "name": "jakarta-ee", - "posts": ["26.0.0.5", "26.0.0.4-beta", "26.0.0.3", "25.0.0.12-beta", + "posts": ["26.0.0.7-beta", "26.0.0.5", "26.0.0.4-beta", "26.0.0.3", "25.0.0.12-beta", "24.0.0.12-beta", "rethinking-microservices", "24.0.0.8", "liberty-developer-essentials-badge", "24.0.0.8-beta", "24.0.0.7-beta", diff --git a/posts/2026-06-30-26.0.0.7-beta.adoc b/posts/2026-06-30-26.0.0.7-beta.adoc index 9f8ac95e07..e11e86268b 100644 --- a/posts/2026-06-30-26.0.0.7-beta.adoc +++ b/posts/2026-06-30-26.0.0.7-beta.adoc @@ -247,8 +247,8 @@ To learn more about this feature, see the following resources: // // // // // // // // [#mpHealth_4_0] == Disabling mpHealth-4.0 REST endpoints when file-based health checks are enabled - -The mpHealth-4.0 feature enables a MicroProfile Health 4.0 runtime for the Open Liberty server. This runtime supports a file-based health check mechanism as an alternative to the `/health/` REST endpoints. When the file-based health check mechanism is enabled, you can now disable the `/health/started`, `/health/live`, and `/health/ready` REST endpoints using server configuration attributes. + +The mpHealth-4.0 feature enables support for MicroProfile Health 4.0 in Open Liberty. The feature also includes a file-based health check mechanism as an alternative to the `/health` REST endpoints. When the file-based health check mechanism is enabled, you can now disable the `/health/started`, `/health/live`, and `/health/ready` REST endpoints using server configuration attributes. Previously, when file-based health checks were enabled, the REST-based MicroProfile Health endpoints were still registered and accessible. This behavior was often redundant for Kubernetes deployments that rely on file-based health checks, where users typically configure probes using the `exec` strategy rather than `httpGet` or `gRPC`. In these scenarios, the REST health endpoints are not used.