このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Framework 6.2.2 を使用してください! |
Bean の ObjectName
インスタンスの制御
バックグラウンドでは、MBeanExporter
は ObjectNamingStrategy
の実装に委譲して、登録する各 Bean の ObjectName
インスタンスを取得します。デフォルトでは、デフォルトの実装である KeyNamingStrategy
は、beans
Map
のキーを ObjectName
として使用します。さらに、KeyNamingStrategy
は、beans
Map
のキーを Properties
ファイル(または複数のファイル)のエントリにマップして、ObjectName
を解決することができます。KeyNamingStrategy
に加えて、Spring は 2 つの追加の ObjectNamingStrategy
実装を提供します。IdentityNamingStrategy
(Bean の JVM ID に基づいて ObjectName
を構築します)と MetadataNamingStrategy
(ソースレベルのメタデータを使用して ObjectName
を取得します)です。
プロパティからの ObjectName
インスタンスの読み取り
独自の KeyNamingStrategy
インスタンスを構成し、Bean キーを使用するのではなく、Properties
インスタンスから ObjectName
インスタンスを読み取るように構成できます。KeyNamingStrategy
は、Bean キーに対応するキーを使用して、Properties
のエントリを見つけようとします。エントリが見つからない場合、または Properties
インスタンスが null
の場合、Bean キー自体が使用されます。
次のコードは、KeyNamingStrategy
のサンプル構成を示しています。
<beans>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="testBean" value-ref="testBean"/>
</map>
</property>
<property name="namingStrategy" ref="namingStrategy"/>
</bean>
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
<property name="name" value="TEST"/>
<property name="age" value="100"/>
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.KeyNamingStrategy">
<property name="mappings">
<props>
<prop key="testBean">bean:name=testBean1</prop>
</props>
</property>
<property name="mappingLocations">
<value>names1.properties,names2.properties</value>
</property>
</bean>
</beans>
上記の例では、KeyNamingStrategy
のインスタンスを、マッピングプロパティで定義された Properties
インスタンスと、マッピングプロパティで定義されたパスにあるプロパティファイルからマージされた Properties
インスタンスで構成します。この構成では、Bean キーに対応するキーを持つ Properties
インスタンスのエントリであるため、testBean
Bean には bean:name=testBean1
の ObjectName
が与えられます。
Properties
インスタンスにエントリが見つからない場合、Bean キー名が ObjectName
として使用されます。
MetadataNamingStrategy
を使用する
MetadataNamingStrategy
は、各 Bean の ManagedResource
属性の objectName
プロパティを使用して、ObjectName
を作成します。次のコードは、MetadataNamingStrategy
の構成を示しています。
<beans>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="testBean" value-ref="testBean"/>
</map>
</property>
<property name="namingStrategy" ref="namingStrategy"/>
</bean>
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
<property name="name" value="TEST"/>
<property name="age" value="100"/>
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="attributeSource"/>
</bean>
<bean id="attributeSource"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
</beans>
objectName
が ManagedResource
属性に提供されていない場合、ObjectName
は次の形式で作成されます: [ 完全修飾パッケージ名 ]:type = [short-classname]、name = [bean-name] 例: 次の Bean に対して生成される ObjectName
は com.example:type=MyClass,name=myBean
になります。
<bean id="myBean" class="com.example.MyClass"/>
アノテーションベースの MBean エクスポートの構成
管理インターフェースを定義するためにアノテーションベースのアプローチを使用する場合は、MBeanExporter
の便利なサブクラスである AnnotationMBeanExporter
を使用できます。このサブクラスのインスタンスを定義する場合、標準の Java アノテーションベースのメタデータが常に使用されるため (自動検出も常に有効)、namingStrategy
、assembler
、attributeSource
構成は不要になります。実際、MBeanExporter
Bean を定義するのではなく、次の例に示すように、@EnableMBeanExport
@Configuration
アノテーションまたは <context:mbean-export/>
要素によってさらに単純な構文がサポートされています。
Java
Kotlin
XML
@Configuration
@EnableMBeanExport
public class JmxConfiguration {
}
@Configuration
@EnableMBeanExport
class JmxConfiguration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:mbean-export/>
</beans>
必要に応じて、特定の MBean server
への参照を提供できます。defaultDomain
属性(AnnotationMBeanExporter
のプロパティ)は、生成された MBean ObjectName
ドメインの代替値を受け入れます。これは、次の例に示すように、前の MetadataNamingStrategy セクションで説明したように、完全修飾パッケージ名の代わりに使用されます。
Java
Kotlin
XML
@Configuration
@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
public class CustomJmxConfiguration {
}
@Configuration
@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
class CustomJmxConfiguration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:mbean-export server="myMBeanServer" default-domain="myDomain"/>
</beans>
Bean クラスで JMX アノテーションの自動検出と組み合わせてインターフェースベースの AOP プロキシを使用しないでください。インターフェースベースのプロキシは、ターゲットクラスを「非表示」にします。これにより、JMX 管理のリソースアノテーションも非表示になります。その場合はターゲットクラスプロキシを使用する必要があります(<aop:config/> 、<tx:annotation-driven/> などで "proxy-target-class" フラグを設定することにより)。そうしないと、JMXBean が起動時にサイレントに無視される可能性があります。 |