How can I Stop MDB via Programming ?
shankha Aug 30, 2007 8:13 AMI have deployed a MDB in the JBOSS.
I send a simple message to the JBOSS testQueue and the MDB reads that message.
Is there any way to stop the MDB to get the message from the testQueue ?
I already invoke the JMSContainerInvokerMBean for that MDB and also
invoke the stopDelivery();/stop(); method on it.
But it is not working.
when I send the message MDB is reading the message.
Please help me.
Code is listed below.
package com.test;
import org.jboss.logging.Logger;
import org.jboss.mx.util.MBeanServerLocator;
import org.jboss.mx.util.MBeanProxy;
import org.jboss.ejb.plugins.jms.JMSContainerInvokerMBean;
import javax.ejb.SessionBean;
import javax.ejb.CreateException;
import javax.ejb.SessionContext;
import javax.ejb.EJBException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
import javax.management.MBeanInfo;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* Created by IntelliJ IDEA.
* User: 151054
* Date: Aug 30, 2007
* Time: 2:29:30 PM
* To change this template use File | Settings | File Templates.
*/
public class MBeanTestBean implements SessionBean {
//private static Logger log;
private SessionContext mContext;
private MBeanServer mbeanServer;
private ObjectName mManagementService;
private Context jndiCtx=null;
private JMSContainerInvokerMBean invoker = null;
public MBeanTestBean() {
}
public void ejbCreate() throws CreateException {
if(mbeanServer == null)
try {
jndiCtx = new InitialContext();
String serverName = (String)jndiCtx.lookup("java:comp/env/Server-Name");
serverName = serverName.trim();
if(serverName == null || serverName.length() == 0 || serverName.equals("null")) {
try {
mbeanServer = MBeanServerLocator.locateJBoss();
System.out.println("@@@ --------- mbeanServer = "+mbeanServer.getDefaultDomain());
System.out.println("@@@ --------- mbeanServer No of MBean = "+mbeanServer.getMBeanCount());
}
catch(IllegalStateException e) {
throw new CreateException("No local JMX MBeanServer available");
}
} else {
Object lServer = jndiCtx.lookup(serverName);
if(lServer != null) {
if(lServer instanceof MBeanServer)
mbeanServer = (MBeanServer)lServer;
else
throw new CreateException("Server: " + lServer + " reference by Server-Name: " + serverName + " is not of type MBeanServer");
} else {
throw new CreateException("Server-Name " + serverName + " does not reference an Object in JNDI");
}
}
}
catch(NamingException ne) {
throw new EJBException(ne);
}
}
public void setSessionContext(SessionContext sessionContext) throws EJBException {
}
public void ejbRemove() throws EJBException {
}
public void ejbActivate() throws EJBException {
}
public void ejbPassivate() throws EJBException {
}
public void invokeMBeanFeatures(){
try{
//Object name = jndiCtx.lookup("MessageEJB");
ObjectName objName = new ObjectName("jboss.j2ee:service=EJB,plugin=invoker,binding=message-driven-bean,jndiName=MessageEJB");
//ObjectName objName = new ObjectName((String)name);
MBeanInfo objMBeanInfo = mbeanServer.getMBeanInfo(objName);
System.out.println("@@ -- MBeanTestBean :invokeMBeanFeatures : "+objMBeanInfo.getClassName());
invoker = (JMSContainerInvokerMBean) MBeanProxy.get(JMSContainerInvokerMBean.class,objName,mbeanServer );
//invoker.stopDelivery();
invoker.stop();
}catch(Exception ex){
ex.printStackTrace();
}
}
}