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
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
org.apache.camel:context=camel-1,type=context,name=camel-1
CamelContext
で名前を設定すると、その名前は ObjectName
に含まれます。たとえば、以下があるとします。
<camelContext id="myCamel" ...>
<camelContext id="myCamel" ...>
この場合、MBean 名は以下のようになります。
org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
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
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#");
System.setProperty(JmxSystemPropertyKeys.MANAGEMENT_NAME_PATTERN, "cool-#name#");
したがって、CamelContext
を明示的に名前を付け、固定 MBean 名を使用する場合は、変更しない(カウンターはありません)、新しい managementNamePattern
属性を使用できます。
<camelContext id="myCamel" managementNamePattern="#name#">
<camelContext id="myCamel" managementNamePattern="#name#">
この場合、MBean 名は常に以下のようになります。
org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
Java では、以下のように managementNamePattern
を設定できます。
context.getManagementNameStrategy().setNamePattern("#name#");
context.getManagementNameStrategy().setNamePattern("#name#");
また、id 以外の名前を managementNamePattern
で使用することができるため、たとえば以下を行うことができます。
<camelContext id="myCamel" managementNamePattern="coolCamel">
<camelContext id="myCamel" managementNamePattern="coolCamel">
OSGi バンドル ID を MBean 名の一部として望ましくない場合に、OSGi 環境ではこの設定を行うことができます。サーバーを再起動するか、同じアプリケーションのアンインストールおよびインストールを行うと、OSGi バンドル ID が変更される可能性があります。次に、以下のように、OSGi バンドル ID を名前の一部として使用しないようにすることができます。
<camelContext id="myCamel" managementNamePattern="#name#">
<camelContext id="myCamel" managementNamePattern="#name#">
これには、myCamel
は JVM 全体で一意である必要があることに注意してください。同じ CamelContext
id と managementNamePattern
を持つ 2 番目の Camel アプリケーションをインストールすると、Camel は起動時に失敗し、MBean はすでに存在する例外を報告します。