0 Replies Latest reply on Aug 30, 2007 8:13 AM by shankha Bhattacharya

    How can I Stop MDB via Programming ?

    shankha Bhattacharya Newbie

      I 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();
       }
       }
      }