Что касается удаленного доступа, модуль Spring для JMX предлагает две реализации FactoryBean
внутри пакета org.springframework.jmx.support
для создания коннекторов на стороне сервера и клиента.
Коннекторы на стороне сервера
Чтобы фреймворк JMX через Spring создал, запустил и открыл JMXConnectorServer
из спецификации JSR-160, можно использовать следующую конфигурацию:
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/>
По умолчанию ConnectorServerFactoryBean
создает JMXConnectorServer
, привязанный к service:jmx:jmxmp://localhost:9875
. Таким образом, бин serverConnector
открывает локальный MBeanServer
для клиентов через протокол JMXMP на localhost, порт 9875. Обратите внимание, что протокол JMXMP помечен как необязательный в спецификации JSR 160. В настоящее время основная реализация JMX с открытым исходным кодом, MX4J, и реализация, поставляемая с JDK, не поддерживают JMXMP.
Чтобы задать другой URL-адрес и зарегистрировать сам JMXConnectorServer
на MBeanServer
, можно использовать свойства serviceUrl
и ObjectName
соответственно, как показано в следующем примере:
<bean id="serverConnector"
class="org.springframework.jmx.support.ConnectorServerFactoryBean">
<property name="objectName" value="connector:name=rmi"/>
<property name="serviceUrl"
value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector"/>
</bean>
Если свойство ObjectName
установлено, Spring автоматически зарегистрирует коннектор на MBeanServer
под этим ObjectName
. В следующем примере показан полный набор параметров, которые можно передать в ConnectorServerFactoryBean
при создании JMXConnector
:
<bean id="serverConnector"
class="org.springframework.jmx.support.ConnectorServerFactoryBean">
<property name="objectName" value="connector:name=iiop"/>
<property name="serviceUrl"
value="service:jmx:iiop://localhost/jndi/iiop://localhost:900/myconnector"/>
<property name="threaded" value="true"/>
<property name="daemon" value="true"/>
<property name="environment">
<map>
<entry key="someKey" value="someValue"/>
</map>
</property>
</bean>
Обратите внимание, что при использовании коннектора на основе RMI необходимо, чтобы служба поиска (tnameserv
or rmiregistry
) была запущена для завершения регистрации имени. Если Spring используется для экспорта удаленных служб через RMI, то в Spring уже создан RMI-реестр. Если нет, можно легко запустить реестр с помощью следующего фрагмента конфигурации:
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="1099"/>
</bean>
Коннекторы на стороне клиента
Чтобы создать соединение MBeanServerConnection
к удаленному MBeanServer
с поддержкой JSR-160, можно использовать MBeanServerConnectionFactoryBean
, как показано в следующем примере:
<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi"/>
</bean>
JMX через Hessian или SOAP
JSR-160 позволяет расширить способ взаимодействия между клиентом и сервером. Примеры, показанные в предыдущих разделах, используют обязательную реализацию на основе RMI, требуемую спецификацией JSR-160 (IIOP и JRMP) и (необязательную) JMXMP. Используя других поставщиков или реализации JMX (например, MX4J), можно воспользоваться преимуществами таких протоколов, как SOAP или Hessian через простой HTTP или SSL и др., как показано в следующем примере:
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean">
<property name="objectName" value="connector:name=burlap"/>
<property name="serviceUrl" value="service:jmx:burlap://localhost:9874"/>
</bean>
В предыдущем примере мы использовали MX4J 3.0.0. Более подробную информацию см. в официальной документации к MX4J.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ