|
|
WebOTX Manual V11.1 (第6版) 目次を表示 |
本章ではMicroProfile仕様の非互換に関する情報を説明します。
MicroProfile仕様はバージョンアップの際に非互換を発生させることがあり、 これによりWebOTXをバージョンアップすると既存のMicroProfileアプリケーションの 動作が変わる、あるいは動作しなくなる等の影響が生じる場合があります。
このため、MicroProfileに準拠したアプリケーションを開発もしくは移行する場合は、 本章に記載されている互換性情報で影響の有無を確認してください。
MicroProfile仕様を4.1にアップデートした場合の互換性情報を説明します。 この互換性情報は、WebOTX V11.1にアップデートする際に該当します。
| MP-Config 1.3での優先順位 | 実装条件 | MP-Config 2.0での優先順位 |
|---|---|---|
| 1 | ターゲット型Tにpublic static T of(String)メソッドがある | 1 |
| 2 | ターゲット型Tにpublic static T valueOf(String)メソッドがある | 2 |
| 3 | ターゲット型TにStringパラメーターを持つpublicコンストラクタがある | 4 |
| 4 | ターゲット型Tにpublic static T parse(CharSequence)メソッドがある | 3 |
org.eclipse.microprofile.config.spi.ConfigSourceを拡張実装したアプリケーションでは、ConfigSource実装クラスに以下のメソッド実装が必須になりました。
Set<String> getPropertyNames()
「${プロパティ名}」のフォーマットでプロパティ値が展開されるようになりました。 他にもフォーマットには以下が使用可能です。
・${expression:value}: expressionの値が見つからない場合は、valueで指定したデフォルト値とします。
・${my.prop${compose}}: 内部式を値に解決後に外部式を解決します。
・${my.prop}${my.prop}: 複数の式。
そのため以下の様にプロパティの値によっては旧バージョンとプロパティの値が変わる場合があります。
server.url=http://${server.host}/
server.host=localhost
MP-Config 1.4まで: server.urlの値は「http://${server.host}/」
MP-Config 2.0から: server.urlの値は「http://localhost/」
これまでと同じプロパティ値を取得するには以下のいずれかの方法があります。
mp.config.property.expressions.enabled=false
org.eclipse.microprofile.config.ConfigValue#getRowValue()
server.url=\\${server.host}
server.host=localhost
その他の設定ソース(環境変数、システムプロパティ等)の場合は"\"で"$"をエスケープします。
server.url=\${server.host}
server.host=localhost
| 設定値 | 戻り値タイプ | メソッド | 取得結果(旧仕様) | 取得結果(新仕様) |
|---|---|---|---|---|
| "" | String | getValue | "" | throws NoSuchElementException |
| "" | String | getOptionalValue | Optional.of("") | Optional.empty() |
そのため設定値を空にしている場合は値を明記してください。
Fault Toleranceインターセプタのデフォルト優先度が「LIBRARY_AFTER+1」から「PLATFORM_AFTER+10」に変更となります。
これにより、旧バージョン環境においてユーザがFault Tolerance以外のインターセプタを実装している場合は、インターセプタの実行順番が変わる可能性があります。
対応する場合は、当該インターセプタの優先度か、Fault Toleranceインターセプタの優先度設定「mp.fault.tolerance.interceptor.priority」を変更してください。
設定項目については、[ リファレンス > 設定 >
マイクロサービスアプリケーション >
MicroProfile Fault Tolerance ] を参照してください。
MicroProfile Metricsとの連携変更により、メトリクススコープが「application」から「base」に変更、またタグ機能(メトリクスを細かく識別する情報)を追加しました。
これにより、旧バージョン環境においてユーザがメトリクス情報を参照している場合は参照先を見直す必要があります。
対応する場合は、Fault Toleranceメトリクス情報を参考に、参照先を見直してください。
SmallRye独自設定「mpft.syncCircuitBreaker」(CircuitBreakerアノテーションの使用可否)の削除により、falseを設定していた場合でもCircuitBreakerアノテーションが使用不可となりません。
設定をfalse(使用しない)としていた場合は、アノテーション使用可否設定「CircuitBreaker/enabled=false」(CircuitBreakerアノテーションの無効化)で代用してください。
設定項目については、[ リファレンス > 設定 >
マイクロサービスアプリケーション >
MicroProfile Fault Tolerance ] を参照してください。
ユーザーがアプリケーションに作成・配置するヘルスチェック応答を生成するクラスに使用していた@Healthアノテーション(org.eclipse.microprofile.health.Health)が廃止され、@Liveness(org.eclipse.microprofile.health.Liveness)、@Readiness(org.eclipse.microprofile.health.Readiness)、@Startup(org.eclipse.microprofile.health.Startup)アノテーションが追加されました。(@Healthアノテーションを定義したクラスは機能しません)
WebOTX V10.4までに使用していたクラスは新たに追加された@Liveness(アプリケーション準備状態)、@Readiness(アプリケーション実行状態)、@Startup(アプリケーション起動状態)アノテーションに
置き換える必要がります。MicroProfile Health のサンプルコードを参考にしてください。
レスポンスで返却するjsonフォーマットの構成がWebOTX V10.4から変更されており、それに伴いレスポンス内容の解釈を変更する必要があります。
全体の状態を示す"outcome"と、各"data"の"state"が、"status"に変更になりました。
{
"outcome":"UP",
"checks": [
{ "name":"SampleHealth", "state": "UP", "data": { "dataName":"dataValue" } }
]
}
{
"status": "UP",
"checks": [
{ "name": "SampleHealth", "status": "UP", "data": { "dataName": "dataValue" } }
]
}
変更部分(全体の状態を"outcome"と各"data"の"state"だった部分)を強調表示しています。
メトリクスを注釈する際に、そのメトリクスをCDIのinterceptor binding typeとして宣言した場合に指定しました。 以前から意味をなさないアノテーションでしたが、もしコードに記述しているユーザーがいれば削除する必要があります。
これまで、名前のみで管理していたメトリクスを「名前」と「タグ名」のセットで管理するようになりました。
V10.4以前) "threadpool.size": 16 V11.1以降) "threadpool.size;pool=Default_Executor": 16
key名がつぎの正規表現に一致するよう制限されます。Key名を設定する際に注意してください。
[a-zA-Z_][a-zA-Z0-9_]*
MicroProfile Configよりmp.metrics.tagsを介してタグ値を定義できます。タグ値の中に等号=やカンマ,が含まれていると、バックスラッシュでエスケープする必要があります。
エスケープ前)export MP_METRICS_TAGS=app=shop,tier=integration=y,y エスケープ後)export MP_METRICS_TAGS=app=shop,tier=integration\=y\,y
OPTIONSメソッドでメタデータを出力した時のタグの出力形式が変更になりました。OPTIONSメソッドを利用する時に注意してください。
V10.4以前の出力例)
"gc.time": {
"name": "gc.time",
"tags": "name=PSScavenge","name=PSMarkSweep"
},
V11.1以降の出力例)
"gc.time": {
"name": "gc.time",
"tags": [
[
"name=PSScavenge"
],
[
"name=PSMarkSweep"
]
]
},
一部の累積カウンターの名前が、最後にtotalを付与する形に変更しています。
V10.4以前) "gc.PS MarkSweep.count" "gc.PS Scavenge.count" "classloader.totalLoadedClass.count" "classloader.totalUnloadedClass.count" V11.1以降) "gc.total;name=PSMarkSweep” "gc.total;name=PSScavenge" "classloader.loadedClasses.total" "classloader.unloadedClasses.total"
一部のカウンターは、タイプがカウンター(Counter)からゲージ(Gauge)に変更されました。
・thread.count ・thread.daemon.count ・classloader.currentLoadedClass.count ・thread.max.count
従来Prometheus(プロメテウス)と呼ばれていた出力形式が、OpenMetricsという形式に変更しています。合わせて、メトリクス名の区切りが :(コロン)ではなく _(アンダースコア) に変更となります。
V10.4以前) base:cpu_available_processors V11.1以降) base_cpu_availableProcessors
再利用とは、アノテーションを利用して同じメトリクスを複数登録する事を指します。従来は、アノテーションの属性として明示的に指定(reusable = true)する必要がありましたが、これからは全てが再利用可能となります。またreusable指定は廃止されています。
@Metricアノテーションをメソッドに付与してもメトリクスとして登録されなくなります。@Counted等他のアノテーションを使うか、MetricRegistryクラスを使うなど、代替手段に切り替えてください。
org.eclipse.microprofile.metrics.MetricRegistryが抽象クラスからインタフェースへ変更となりました。MetricRegistryクラスを利用していたアプリケーションは修正の必要があります。
org.eclipse.microprofile.metrics.Timer#update()メソッド引数が変更となりました。
V10.4以前) update(long duration, TimeUnit unit) V11.1以降) update(Duration duration)
@Consumes、@ProducesアノテーションでMIMEタイプが指定されない場合、デフォルト値として"application/json"が使用されます。
V10.4で動作していたRest ClientアプリケーションをV11.1に配備した場合、配備解除やドメイン停止時に次のメッセージが出力されます。
INFO MICROPROFILE - OTX31070045: Closing a class org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient43Engine instance for you. Please close clients yourself
Rest ClientアプリケーションにClose処理を追加することで、メッセージ出力を抑止することができます。詳細については、[MicroProfile Rest Client > 提供機能 > MicroProfile Rest Clientのライフサイクル]をご覧ください。