2012-06-25 78 views
0

我試圖訪問MessageHandler端點以通過JMX啓動和停止該服務。我在我的上下文文件中有下面的配置。我可以通過JConsole訪問啓動/停止方法。以編程方式訪問通過JMX公開的MessageHandlers

我也能夠從基於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是在我所定義的啓動()的界面處,停止()和isRunning()方法,這樣我可以從任何班級訪問它。

當我嘗試測試它時,我得到調用異常。 任何建議將不勝感激

回答

1

你問了春天論壇上的同一個問題;我在那裏回答了。 http://forum.springsource.org/showthread.php?127726-Programatically-access-MessageHandlers-exposed-via-JMX

,但我會在這裏重複的答案...

首先,停止處理程序是不正確的事情 - 一切需要做的是從通道退訂和郵件將得到錯誤「調度沒有訂戶「。您需要停止()消息驅動通道適配器。

其次,您需要提供完整的MBean對象名稱,例如「com.irebalpoc.integration:type = ManagedEndpoint,na me = jmsin,bean = endpoint」。您可以在MBean元數據中找到它(例如在VisualVM中)。

+0

感謝您的回答。我之前沒有收到任何回覆,所以我在這裏添加了它。 – shashikanthb