第3章 機能
3.1. 新機能および変更された機能 リンクのコピーリンクがクリップボードにコピーされました!
本項では、本リリースで導入された新機能を説明します。また、既存の機能の変更に関する情報も含まれます。
3.1.1. 4.2 リリースで導入された新機能 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2 は、以下の新機能を提供します。
3.1.1.1. Java 17 のサポート リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.7 以降、Eclipse Vert.x は Red Hat OpenJDK 17 での使用が認定されています。
3.1.1.2. RequestOptions での HTTP ヘッダーの検証 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.4 以降では、RequestOptions メソッドは HTTP ヘッダーを検証し、ヘッダー名が無効な場合に要求が失敗します。
Eclipse Vert.x の以前のリリースでは、RequestOptions メソッドではヘッダー名を検証しない Multimap 実装が使用されていたため、HTTPClientRequest は HTTP ヘッダーを検証していました。
3.1.1.3. 照合用のデフォルトロケールとしての simple の使用 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.4 以降では、simple ロケールが MongoDB collation のデフォルトロケールとして使用されます。
Eclipse Vert.x 4.2.3 では、文字列を比較するための言語固有のルールをサポートする照合オプションに対するサポートが導入されました。Eclipse Vert.x 4.2.3 では、プラットフォームのデフォルトがデフォルトのロケールとして使用されていました。ただし、プラットフォームのデフォルトは定数値ではないため、MongoDB でサポートされていないロケールを使用するシステムでエラーが発生する可能性がありました。たとえば、Locale.FR は正常に機能しますが、Locale.FR_FR はサポートされません。
3.1.1.4. StaticHandler ファイルシステム設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.4 以降では、webroot ディレクトリーおよびファイルシステムアクセスの StaticHandler 設定プロパティーは、StaticHandler ファクトリーコンストラクター呼び出しで定義されます。
たとえば、以下のコンストラクター呼び出しは、webroot ディレクトリー、static/resources、および相対ファイルシステムアクセスを定義します。
StaticHandler.create(FileSystemAccess.RELATIVE, "static/resources");
たとえば、以下のコンストラクター呼び出しは、webroot ディレクトリー、/home/paulo/Public、および root ファイルシステムのアクセスを定義します。
StaticHandler.create(FileSystemAccess.ROOT, "/home/paulo/Public");
Eclipse Vert.x の以前のリリースでは、allowRootFileSystemAccess および webroot プロパティーはセッターを使用して定義されていました。ただし、このプロパティーの値は最終的なものではなかったため、無効な静的設定が生じる可能性がありました。Eclipse Vert.x 4.2.4 では、前述のコンストラクター呼び出しは以下のセッター宣言に優先されるようになりました。
StaticHandler.create()
.setAllowRootFileSystemAccess(true)
.setWebRoot("/home/paulo/Public");
StaticHandler.create() メソッドは、以前のリリースと同様に RELATIVE および webroot のデフォルト値を使用します。
3.1.1.5. verticle 内でのランダムサーバーポートの共有 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.0 以降では、-1 などの負のポート番号にバインドされた 2 つの異なる HTTP サーバーは、特定の verticle デプロイメントのインスタンス内で同じランダムポートを共有します。つまり、ポート -1 にバインドされている複数の HTTP サーバーが、同じランダムポートを共有します。同様に、ポート -2 にバインドされている複数の HTTP サーバーは、同じランダムポートを共有します。異なる HTTP サーバーが異なるランダムポートを持つことが可能になるため、負のポート番号に基づくこのポート共有の動作は verticle とは無関係です。
Eclipse Vert.x の以前のリリースでは、ランダムサーバーポート共有は、ポート 0 にバインドされた 2 つの HTTP サーバーに基づいていました。しかし、これにより、同じ verticle のインスタンス内に、異なるランダムポートを持つ 2 つの HTTP サーバーをバインドできなくなりました。
3.1.1.6. HTTP サーバークッキーの変更 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.0 には、すべてのクッキーを取得できる新しいメソッド Set<Cookie> cookies() が含まれます。
Vert.x の以前のリリースでは、HttpServerRequest および HttpServerResponse インターフェイスは、EclipseVert.x4.2.0 で非推奨となった次のメソッドを使用していました。
Map<String, Cookie> cookieMap()
RFC 6265 - HTTP 状態管理メカニズム の仕様では、各クッキーはタプル <name, domain, path> に基づいて一意に識別されると規定されています。しかし、EclipseVert.x の以前のリリースで使用されていた Map<String, Cookie> cookieMap() メソッドは、クッキーが名前のみに基づいて識別できると誤って想定していました。つまり、複数のクッキーが同じ名前を共有している場合、マップは解析される最後のクッキーを保持し、以前に解析された値はすべて警告なしで上書きされていました。
3.1.1.7. GraphQLContext オブジェクトによるコンテキスト管理 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.2.0 は、GraphQL クエリー言語の Java サーバー実装である GraphQL Java のバージョン 17 をサポートします。GraphQL Java 17 では、GraphQLContext オブジェクトが GraphQL Java アプリケーションのコンポーネント間でコンテキストデータを共有するための標準になりました。
Eclipse Vert.x 4.2.0 では、GraphQL の実行を設定するために以下の新しいメカニズムが導入されました。
GraphQLHandler handler = GraphQLHandler.create(graphQL).beforeExecute(builderWithContext -> {
DataLoader<String, Link> linkDataLoader = DataLoaderFactory.newDataLoader(linksBatchLoader);
DataLoaderRegistry dataLoaderRegistry = new DataLoaderRegistry().register("link", linkDataLoader);
builderWithContext.builder().dataLoaderRegistry(dataLoaderRegistry);
});
Eclipse Vert.x の以前のリリースでは、データローダーを設定するために Vert.x Web GraphQL ハンドラーで次のフックが使用されていました。以下のフックは Eclipse Vert.x 4.2.0 で非推奨になりました。
GraphQLHandler handler = GraphQLHandler.create(graphQL).dataLoaderRegistry(rc -> {
DataLoader<String, Link> linkDataLoader = DataLoader.newDataLoader(linksBatchLoader);
return new DataLoaderRegistry().register("link", linkDataLoader);
});
3.1.2. 以前の 4.x リリースで導入された新機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の新機能は、以前の 4.x リリースで導入されました。
3.1.2.1. OpenJDK11 OpenShift イメージは複数のアーキテクチャーをサポートします リンクのコピーリンクがクリップボードにコピーされました!
IBM Z および IBMPowerSystems の OpenJ9 イメージは非推奨になりました。次の OpenJDK11 イメージは、複数のアーキテクチャーをサポートするように更新されています。
-
ubi8/openjdk-11
OpenJDK11 イメージは、次のアーキテクチャーで使用できます。
- x86 (x86_64)
- s390x (IBM Z)
- ppc64le (IBM Power Systems)
3.1.2.2. FIPS 対応の Red Hat Enterprise Linux (RHEL) システムでの Eclipse Vert.x Runtime のサポート リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x の Red Hat ビルドは、FIPS 対応の RHEL システムで実行され、RHEL が提供する FIPS 認定ライブラリーを使用します。
3.1.2.3. HTTP クライアントのリダイレクトハンドラーのヘッダー伝播 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 以降では、HTTP リダイレクトにヘッダーがある場合は、HTTP クライアントのリダイレクトハンドラーはヘッダーを次の要求に伝播します。この変更により、リダイレクトハンドラーは、リダイレクトされた要求全体をより詳細に制御できるようになります。
以前のリリースの Eclipse Vert.x では、ヘッダーのあるリダイレクト要求があったため、HTTP クライアントはリダイレクト後にヘッダーを処理していました。
以下の例は、Eclipse Vert.x 4.1.0 でリダイレクトを処理する方法を示しています。
RequestOptions options = new RequestOptions();
options.setMethod(HttpMethod.GET);
options.setHost(uri.getHost());
options.setPort(port);
options.setSsl(ssl);
options.setURI(requestURI);
// From 4.1.0 propagate headers
options.setHeaders(resp.request().headers());
options.removeHeader(CONTENT_LENGTH);
3.1.2.4. Infinispan 12 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 では、Infinispan クラスターマネージャーが更新され、Infinispan 12 をベースにしています。
Infinispan 11 には、マルチマップキャッシュにバイトアレイを保存できないバグがありました。Eclipse Vert.x クラスターマネージャーは、内部 Infinispan クラス WrappedBytes を使用して eventbus サブスクリプションデータを保存する必要がありました。この問題は Infinispan 12 で修正されました。
3.1.2.5. MongoDB クライアントの接続文字列オプションより JSON 設定を優先 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 では、connection_string オプションが利用可能な場合でも JSON 設定オプションが適用されます。
次の設定オプションが適用されるようになりました。
{
mongo:{
db_name: "mydb"
connection_string: "mongodb://localhost:27017"
maxPoolSize: 10
minPoolSize: 3
}
}
以前のリリースの Eclipse Vert.x では、接続文字列が利用可能な場合に JSON 設定オプションは無視されていました。たとえば、前述の例を見てみましょう。以前のリリースの Eclipse Vert.x では、db_name、maxPoolSize、および minPoolSize オプションは無視されていました。
3.1.2.6. 非推奨の JWT オプションメソッドの削除 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.0 以降では、スコープの処理に JWT および OAuth2 ハンドラーが使用されます。
Eclipse Vert.x 4.1.0 以降、JWTOptions.setScopes(List<String>)、JWTOptions.addScope(String)、および JWTOptions.withScopeDelimiter(String) メソッドが削除されました。これらのメソッドは仕様に準拠していませんでした。
以下の例は、Eclipse Vert.x 4.1.0 でスコープを処理する方法を示しています。
// before 4.1.0
JWTAuthOptions authConfig = new JWTAuthOptions()
.setJWTOptions(new JWTOptions()
.addScope("a")
.addScope("b")
.withScopeDelimiter(" ")));
JWTAuth authProvider = JWTAuth.create(vertx, authConfig);
router.route("/protected/*").handler(JWTAuthHandler.create(authProvider));
// in 4.1.0
JWTAuth authProvider = JWTAuth.create(vertx, new JWTAuthOptions());
router.route("/protected/*").handler(
JWTAuthHandler.create(authProvider)
.addScope("a")
.addScope("b")
.withScopeDelimiter(" "));
3.1.2.7. 関数を受け入れるカスタムフォーマッターメソッドの非推奨 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 から LoggerHandler.customFormatter(Function) メソッドが非推奨になりました。この関数は HttpServerRequest を入力として取り、フォーマットされたログ文字列を返します。出力は文字列であるため、コンテキストにアクセスすることはできません。
代わりに新しいメソッド LoggerHandler customFormatter(LoggerFormatter formatter) を使用してください。このメソッドは、コンテキストへのアクセスを提供するカスタムフォーマッターを入力として取ります。
3.1.2.8. HTTP の失敗を処理する新しい例外 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 以降では、HTTP の失敗の処理に使用できる新しい例外クラス io.vertx.ext.web.handler.HttpException を利用できます。この例外を使用して、500 以外のカスタムステータスコードを指定できます。たとえば、新規の HttpException(401, "Forbidden") は、禁止されているリクエストがステータスコード 401 を返す必要があることを示します。
3.1.2.9. RxJava 3 のサポート リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.1.0 以降では、RxJava 3 がサポートされます。
-
新しい rxified API が
io.vertx.rxjava3パッケージで利用できます。 -
Eclipse Vert.x JUnit5 との統合は、
vertx -junit5-rx-java3バインディングによって提供されます。
3.1.2.10. すべてのタイプのデータをバインドしてより安全になったコンテキストサーバーインターセプター リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.0.3 以降、ContextServerInterceptor.bind () メソッドはすべてのタイプのデータをコンテキストにバインドします。このメソッドはストレージの詳細を公開しないため、より安全になりました。
Eclipse Vert.x 4.0.3 より前のリリースでは、このメソッドは 'String' データ型のみをコンテキストにバインドしていました。また、ストレージの詳細も公開しました。
更新された ContextServerInterceptor.bind () メソッドを使用するには、アプリケーションを更新する必要があります。
以下の例は、Eclipse Vert.x 4.0.3 より前のリリースのコードを示しています。
// Example code from previous releases
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata, ConcurrentMap<String, String> context) {
次の例は、Eclipse Vert.x 4.0.3 リリースの置換コードを示しています。
// Replacing code for Eclipse Vert.x 4.0.3 release
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata) {
3.1.2.11. ワイルドカード文字で終わるルートパスの末尾のスラッシュ (/) の一致が不要 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.0.3 より前のリリースでは、ルートがスラッシュで終わるパスとワイルドカード /* で定義されている場合、一致するリクエストにも末尾のスラッシュ / が含まれている場合にのみ、ルートが呼び出されました。このルールは、ワイルドカードが空の場合に問題を引き起こしました。
Eclipse Vert.x 4.0.3 以降では、このルールは適用されなくなりました。パスがスラッシュ (/) で終わるルートを作成できます。ただし、リクエスト URL にスラッシュを指定することは必須ではありません。
また、リクエスト URL を作成および使用し、パスにスラッシュ (/) ではなく、ワイルドカードで終わるルートを呼び出すこともできます。たとえば、ワイルドカードが含まれるルートは /foo/* として定義できます。ここでは、ルートはパスの最後にあるオープンワイルドカードと一致する必要があります。リクエスト URL は /foo にすることができます。
この表は、Eclipse Vert.x 4.0.3 以前のリリースでのリクエスト URL /foo/ * を送信するときの動作を示しています。Eclipse Vert.x 4.0.3 では終了スラッシュが任意であり、要求はルートに一致することがわかります。
| ルート | Eclipse Vert.x 4.0.3 | Eclipse Vert.x 4.0.3 より前のリリース |
|---|---|---|
|
| Match | No Match |
|
| No Match | No Match |
|
| Match | Match |
|
| Match | Match |
3.1.2.12. サービス検出オプションから autoRegistrationOfImporters 属性を削除 リンクのコピーリンクがクリップボードにコピーされました!
AutoRegistrationOfImporters 属性はサービス検出オプションから削除されました。
3.1.2.13. 入力クレデンシャルとして token をサポートするように認証プロバイダークラスの認証メソッドを更新 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4.0.3 より前のリリースでは、AuthenticationProvider.authenticate () メソッドが入力クレデンシャルとして jwt: someValue を誤って取得していました。
Eclipse Vert.x 4.0.3 以降、AuthenticationProvider.authenticate() メソッドが更新され、token: someValue が入力クレデンシャルとして取得されます。この変更により、JSON API と型指定された API の両方が一貫性を保ち、同じ意味で使用できるようになります。
以下のコードは、Eclipse Vert.x 4.0.3 より前のリリースでの認証メソッドの実装を示しています。
new JsonObject().put("jwt", "token...");
以下のコードは、Eclipse Vert.x 4.0.3 リリースの認証メソッドの実装を示しています。
new JsonObject().put("token", "token...");
3.1.2.14. PEM キーの Get メソッドが String ではなく Buffer を返す リンクのコピーリンクがクリップボードにコピーされました!
PubSecKeyOptions.getBuffer() メソッドは、PEM またはシークレットキーバッファーを返します。Eclipse Vert.x 4.0.2 より前のリリースでは、キーバッファーが保存され String として返されました。ただし、シークレットを Buffer として保存することを推奨します。Eclipse Vert.x 4.0.2 以降では、メソッドはキーバッファーを保存し、Buffer として保存し返します。この変更により、シークレットのセキュリティーおよび処理が改善します。
PubSecKeyOptions.setBuffer() メソッドは String 引数を受け入れます。set メソッドでは、ASCII 以外のシークレット資料を安全に処理するために、バッファーのオーバーロードが追加されました。この変更には、既存のコードを変更する必要はありません。
3.1.2.15. Kubernetes サービスインポーターが自動的に登録されなくなる リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 以降、KubernetesServiceImporter 検出ブリッジは自動的に登録されなくなりました。Maven プロジェクトのクラスパスにブリッジを追加しても、自動的に登録されません。
ServiceDiscovery インスタンスの作成後にブリッジを手動で登録する必要があります。
3.1.2.16. 非同期操作に future メソッドを使用 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 は、非同期操作に future を使用します。すべての callback メソッドには、対応する future メソッドがあります。
future は非同期操作の作成に使用できます。future を使用する場合は、エラー処理の方が優れています。したがって、アプリケーションでコールバックと future の組み合わせを使用することが推奨されます。
3.1.2.17. Jackson Databind ライブラリーの依存関係がない リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 では、Jackson Databind は任意の Maven 依存関係です。この依存関係を使用する場合は、クラスパスに明示的に追加する必要があります。たとえば、オブジェクトマッピング JSON の場合は、依存関係を明示的に追加する必要があります。
3.1.2.18. 非推奨と削除の処理 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 では、新機能が追加されています。以前の機能および機能は Eclipse Vert.x 4 で非推奨または削除されました。アプリケーションを Eclipse Vert.x 4 に移行する前に、非推奨および削除を確認します。
Java コンパイラーは、非推奨の API が使用されたときに警告を生成します。アプリケーションを Eclipse Vert.x 4 に移行する際に、コンパイラーを使用して非推奨のメソッドを確認できます。
3.1.2.19. 分散トレースのサポート リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 は分散トレースをサポートします。トレースを使用してマイクロサービスを監視し、パフォーマンスの問題を特定することができます。
Eclipse Vert.x 4 は OpenTracing システムと統合します。
以下の Eclipse Vert.x コンポーネントはトレースをログに記録できます。
- HTTP サーバーおよび HTTP クライアント
- Eclipse Vert.x SQL クライアント
- Eclipse Vert.x Kafka クライアント
トレースはテクノロジープレビューとして利用できます。テクノロジープレビュー機能は、Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
3.1.2.20. EventBus JavaScript Client の新しい公開場所 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x 4 では、EventBus JavaScript クライアント vertx-web-client.js は Maven リポジトリーの Red Hat アーティファクトとして公開されません。
クライアントは npm リポジトリーに公開されます。@vertx/eventbus-bridge-client.js からクライアントにアクセスできます。
3.1.2.21. OpenShift Maven プラグインを使用した Eclipse Vert.x アプリケーションのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Maven プラグインを使用して、OpenShift に Eclipse Vert.x アプリケーションをデプロイします。Fabric8 Maven プラグインはサポート対象外になりました。詳細は、migrating from Fabric8 Maven Plugin to Eclipse JKube セクションを参照してください。
3.1.2.22. OpenShift の Eclipse Vert.x メータリングラベル リンクのコピーリンクがクリップボードにコピーされました!
メータリングラベルを Eclipse Vert.x Pod に追加し、OpenShift Metering Operator で Red Hat サブスクリプションの詳細を確認できます。
- メータリングラベルは、Operator またはテンプレートがデプロイおよび管理する Pod に追加しないでください。
- OpenShift Container Platform バージョン 4.8 以前では、Metering Operator を使用してラベルを Pod に適用できます。バージョン 4.9 以降は、Metering Operator は直接置き換えなしには利用できなくなりました。
Eclipse Vert.x は、以下のメータリングラベルを使用する必要があります。
-
com.company: Red_Hat -
rht.prod_name: Red_Hat_Runtimes -
rht.prod_ver: 2022-Q2 -
rht.comp: Vert.x -
rht.comp_ver: 4.2.7 -
rht.subcomp: <leave_blank> -
rht.subcomp_t: application
3.1.2.23. OpenJDK 8 および OpenJDK 11 RHEL 8 Universal Base Images (UBI8) のサポート リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Vert.x は、RHEL 8 上の Red Hat OpenJDK 8 および Red Hat OpenJDK 11 用の OCI 準拠の ユニバーサルベースイメージ を使用して、Eclipse Vert.x アプリケーションをビルドして OpenShift にデプロイするためのサポートを導入します。
RHEL 8 OpenJDK Universal Base イメージは、RHEL 8 OpenJDK ビルダーイメージを置き換えます。RHEL 8 OpenJDK ベースイメージは、Eclipse Vert.x との使用がサポートされなくなりました。