Что касается удаленного доступа, модуль 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.