Starting/Stopping MDB via JMX
pbaker01 Dec 15, 2008 4:24 PMFirst I know that the questions below has been asked
many times. I have seen several posts where the replies say:
"Search for the Answer". I have searched and I can't find it...
Note Originally posted JBoss.com -> JBoss User -> Beginners Corner as:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=147307
Problem:
I have a queue and a listener. The listener is configured as an MDB. I want to be able to:
o Start/Stop the Queue via JMX
o Start/Stop the Queue progrmatically
Environment:
JBoss: Jboss-5.0.0 GA
JDK: jdk1.6.0_10
I cannot find an answer for either. First the JMX issue
Below is the code for my MDB:
import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(mappedName = "jms/SSMListener", activationConfig = { @ActivationConfigProperty(propertyName="messagingType", propertyValue="javax.jms.MessageListener"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination",propertyValue="queue/SSMQueue") }) public class SSMListener implements MessageListener { public void onMessage(Message arg0) { // TODO Auto-generated method stub TextMessage tm = (TextMessage) arg0; try { System.out.println("I'm alive - " + tm.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
JBoss XML:
<jboss> <enterprise-beans> <message-driven> <ejb-name>SSMListener</ejb-name> <local-jndi-name>jms/SSMListener</local-jndi-name> <destination-jndi-name>queue/SSMQueue</destination-jndi-name> </message-driven> </enterprise-beans> </jboss>
destinations-service.xml
<mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=SSMQueue"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean>
Here is are two snapshots of my JMX console.
http://img.picbite.com/2008/12/14/22833fjhhs.png
http://img.picbite.com/2008/12/14/22835imemm.png
I don't see any JMX controls for startDelivery or stopDelivery.
o What am I doing wrong here?
o Do I need to configure the MDB as an mbean?
For start/stoping programatically I have the following code:
ObjectName objectName; try { objectName = new ObjectName( "jboss.j2ee:binding=message-driven-bean, jndiName=jms/SSMListener, plugin=invoker,service=EJB"); MBeanServer server = MBeanServerLocator.locateJBoss(); server.invoke(objectName, "stopDelivery", new Object[] {}, null); } catch (MalformedObjectNameException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NullPointerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InstanceNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MBeanException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ReflectionException e) { // TODO Auto-generated catch block e.printStackTrace(); }
This code generates exception:
10:55:55,157 ERROR [STDERR] javax.management.InstanceNotFoundException: jboss.j2ee:binding=message-driven-bean, jndiName=jms/SSMListener, plugin=invoker,service=EJB is not registered.
10:55:55,158 ERROR [STDERR] at org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:529)
10:55:55,158 ERROR [STDERR] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:662)
10:55:55,158 ERROR [STDERR] at com.sita.wab.service.SsimService.startLoad(SsimService.java:65)
10:55:55,158 ERROR [STDERR] at com.sita.wab.ejb.ssim.SsimEjbBean.startLoad(SsimEjbBean.java:32)
I suspect once I get the JMX issue resolved the answer to this problem will be obvious.
Other than the starting/stopping the queue, everything else works well.
Any help will be greatly appreciated.