170.5.4. 管理命名パターン
Camel 2.10 で利用可能
Camel 2.10 以降では、MBean の命名パターンの設定を容易にします。このパターンは、ドメイン名の後にキーとして ObjectName の一部として使用されます。
デフォルトでは、Camel は以下のように ManagedCamelContextMBean に MBean 名を使用します。
org.apache.camel:context=localhost/camel-1,type=context,name=camel-1
Camel 2.13 以降では、ホスト名は MBean 名に含まれないため、上記の例は以下のようになります。
org.apache.camel:context=camel-1,type=context,name=camel-1
CamelContext で名前を設定すると、その名前は ObjectName に含まれます。たとえば、以下があるとします。
<camelContext id="myCamel" ...>
この場合、MBean 名は以下のようになります。
org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
JVM に命名の競合がある場合(上記の名前が指定された MBean がすでに存在しているなど)、Camel はデフォルトでカウンターを使用して JMXMBeanServer で新しい空き名を見つけようとします。カウンターが追加されたように、ObjectName の一部として myCamel-1 があります。
org.apache.camel:context=localhost/myCamel-1,type=context,name=myCamel
これは、Camel はデフォルトで以下のトークンをサポートする命名パターンを使用するためです。
-
camelId= the CamelContext id (eg the name) -
name- same ascamelId -
counter- インクリメントカウンター* bundleId- OSGi バンドル ID(OSGi 環境のみ) -
symbolicName: OSGi シンボリック名(OSGi 環境のみ) -
バージョン: OSGi バンドルバージョン(OSGi 環境のみ)
デフォルトの命名パターンは、OSGi と非 OSGi を区別します。
-
OSGI 以外の:
名前 -
OSGi:
bundleId-name -
OSGi Camel 2.13
しかし、JMXMBeanServer に命名の競合がある場合、Camel は自動的にフォールバックを行い、パターンの カウンター を使用してこれを変更します。そのため、以下のパターンが使用されます。
-
OSGI 以外の -
name-counter -
OSGi:
bundleId-name-counter -
OSGi Camel 2.13:
symbolicName-counter
明示的な命名パターンを設定した場合、そのパターンは常に使用され、上記のデフォルトのパターンは使用され ません。
これにより、レジストリー内の CamelContext ID と JMXMBeanRegistry の JMX MBean の両方に対する命名を完全に制御し、非常に簡単に制御できます。
Camel 2.15 以降では、JVM システムプロパティーを使用してデフォルトの管理名パターンを設定し、これを JVM に対してグローバルに設定できます。以下の例のように、このパターンを明示的に設定することで、このパターンを上書きできます。
JVM システムプロパティーを設定して、その名前の前に名前を追加するデフォルトの管理名パターンを使用します。
System.setProperty(JmxSystemPropertyKeys.MANAGEMENT_NAME_PATTERN, "cool-#name#");
したがって、CamelContext を明示的に名前を付け、固定 MBean 名を使用する場合は、変更しない(カウンターはありません)、新しい managementNamePattern 属性を使用できます。
<camelContext id="myCamel" managementNamePattern="#name#">
この場合、MBean 名は常に以下のようになります。
org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
Java では、以下のように managementNamePattern を設定できます。
context.getManagementNameStrategy().setNamePattern("#name#");
また、id 以外の名前を managementNamePattern で使用することができるため、たとえば以下を行うことができます。
<camelContext id="myCamel" managementNamePattern="coolCamel">
OSGi バンドル ID を MBean 名の一部として望ましくない場合に、OSGi 環境ではこの設定を行うことができます。サーバーを再起動するか、同じアプリケーションのアンインストールおよびインストールを行うと、OSGi バンドル ID が変更される可能性があります。次に、以下のように、OSGi バンドル ID を名前の一部として使用しないようにすることができます。
<camelContext id="myCamel" managementNamePattern="#name#">
これには、myCamel は JVM 全体で一意である必要があることに注意してください。同じ CamelContext id と managementNamePattern を持つ 2 番目の Camel アプリケーションをインストールすると、Camel は起動時に失敗し、MBean はすでに存在する例外を報告します。