我正在尝试访问MessageHandler端点以通过JMX启动和停止服务。我在上下文文件中有以下配置。我可以通过JConsole访问启动/停止方法。
我还可以使用基于spring的客户端使用MBeanServerConnectionFactoryBean访问端点。
现在我想使用MBeanProxyFactoryBean访问端点,以便我可以直接调用方法,就好像bean是本地的一样。这似乎不起作用。
您能否在下面查看我的配置,并提出错误或需要做些什么?
的Server.xml
<int-jms:message-driven-channel-adapter id="jmsIn"
connection-factory="connectionFactory" concurrent-consumers="3" max-concurrent-consumers="5"
destination-name="emsQueue" acknowledge="transacted" channel="jmsInChannel"
extract-payload="false" />
<integration:service-activator id="serviceAct" input-channel="jmsInChannel" output-channel="fileNamesChannel"
ref="handler" method="process" />
client.xml的
<bean id="mBeanServerClient" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl" value="service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi" />
</bean>
<bean id="jmxClient" class="com.abc.test.IBalJMXClient">
<property name="connection" ref="mBeanServerClient" />
</bean>
<bean id="remoteJMSMBean" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName" value="com.abc.test:name=serviceAct" />
<property name="server" ref="mBeanServerClient" />
<property name="proxyInterface" value="com.abc.client.intf.IBalJMSController" />
</bean>
IBalJMSController是我定义了start(),stop()和isRunning()方法的接口,以便我可以从任何类访问它。
当我尝试测试它时,我得到了调用异常。 任何建议将不胜感激
答案 0 :(得分:1)
你在Spring论坛上问了同样的问题;我在那里回答http://forum.springsource.org/showthread.php?127726-Programatically-access-MessageHandlers-exposed-via-JMX
但我会在这里重复一遍......
首先,停止处理程序不是正确的做法 - 所有要做的就是取消订阅频道,消息将收到错误“Dispatcher没有订阅者”。您需要停止()消息驱动通道适配器。
其次,您需要提供完整的MBean对象名称,例如“com.irebalpoc.integration:type = ManagedEndpoint,na me = jmsin,bean = endpoint”。您可以在MBean元数据中找到它(例如在VisualVM中)。