2.16. JMX の命名
概要
Apache Camel では、management name pattern を定義することで、JMX で表示される CamelContext
Bean の名前をカスタマイズすることができます。たとえば、以下のように、XML CamelContext
インスタンスの名前パターンをカスタマイズすることができます。
<camelContext id="myCamel" managementNamePattern="#name#">
...
</camelContext>
CamelContext
Bean の名前パターンを明示的に設定しないと、Apache Camel はデフォルトの命名ストラテジーに戻ります。
デフォルトの命名ストラテジー
デフォルトでは、OSGi バンドルにデプロイされた CamelContext
Bean の JMX 名は、バンドルの OSGi シンボリック名 と同じです。たとえば、OSGi のシンボリック名が MyCamelBundle
の場合、JMX の名前は MyCamelBundle
となります。バンドル内に複数の CamelContext
が存在する場合、接尾辞としてカウンター値を追加することにより、JMX 名が明確になります。たとえば、MyCamelBundle
バンドルに複数の Camel コンテキストがある場合、対応する JMX MBeans の名前は以下のようになります。
MyCamelBundle-1 MyCamelBundle-2 MyCamelBundle-3 ...
JMX 命名ストラテジーのカスタマイズ
デフォルトの命名ストラテジーの欠点の 1 つは、特定の CamelContext
Bean が実行間で同じ JMX 名を持つことを保証できないことです。実行間の一貫性を高める場合は、CamelContext
インスタンスの JMX 名パターン を定義することで、JMX 名をより正確に制御することができます。
Java DSL での名前パターンの指定
Java の CamelContext
で名前パターンを指定するには、以下のように setNamePattern
メソッドを呼び出します。
// Java context.getManagementNameStrategy().setNamePattern("#name#");
XML での名前パターンの指定
XML の CamelContext
で名前パターンを指定するには、以下のように camelContext
要素の managementNamePattern
属性を設定します。
<camelContext id="myCamel" managementNamePattern="#name#">
名前パターントークン
以下のいずれかのトークンにリテラルテキストを追加することで、JMX 名前パターンを設定することができます。
トークン | 説明 |
---|---|
|
|
|
|
|
インクリメントカウンター ( |
| デプロイされたバンドルの OSGi バンドル ID OSGi のみ) |
| OSGi シンボリック名 (OSGi のみ) |
| OSGi バンドルバージョン (OSGi のみ) |
例
以下は、サポートされるトークンを使用して定義できる JMX 名前パターンの例です。
<camelContext id="fooContext" managementNamePattern="FooApplication-#name#"> ... </camelContext> <camelContext id="myCamel" managementNamePattern="#bundleID#-#symbolicName#-#name#"> ... </camelContext>
あいまいな名前
カスタマイズされた命名パターンはデフォルトの命名ストラテジーを上書きするため、このアプローチを使用してあいまいな JMX MBean 名を定義することができます。以下に例を示します。
<camelContext id="foo" managementNamePattern="SameOldSameOld"> ... </camelContext> ... <camelContext id="bar" managementNamePattern="SameOldSameOld"> ... </camelContext>
この場合、Apache Camel は起動に失敗し、MBean が既に存在することを示す例外が出力されます。そのため、あいまいな名前のパターンを定義しないように細心の注意を払う必要があります。