2 Replies Latest reply on Sep 8, 2008 5:06 AM by tpawankumar

    Problem while publishing message to the Queue

      Hi All,

      I am publishing the message to the Queue but second time when i publish the same message it is giving me the following exception

      15:23:22,184 ERROR [ClosedInterceptor] ClosedInterceptor.ClientSessionDelegate[7
      ]: method createObjectMessage() did not go through, the interceptor is CLOSED
      15:23:22,184 ERROR [STDERR] javax.jms.IllegalStateException: The object is close
      d
      15:23:22,184 ERROR [STDERR] at org.jboss.jms.client.container.ClosedIntercep
      tor.invoke(ClosedInterceptor.java:157)
      15:23:22,184 ERROR [STDERR] at org.jboss.aop.advice.PerInstanceInterceptor.i
      nvoke(PerInstanceInterceptor.java:105)
      15:23:22,184 ERROR [STDERR] at org.jboss.jms.client.delegate.ClientSessionDe
      legate$createObjectMessage_5541516037526997237.invokeNext(ClientSessionDelegate$
      createObjectMessage_5541516037526997237.java)
      15:23:22,184 ERROR [STDERR] at org.jboss.jms.client.delegate.ClientSessionDe
      legate.createObjectMessage(ClientSessionDelegate.java)
      15:23:22,184 ERROR [STDERR] at org.jboss.jms.client.JBossSession.createObjec
      tMessage(JBossSession.java:134)
      15:23:22,184 ERROR [STDERR] at com.covad.emailmgrservice.helper.VitriaUtil.e
      mailTriggered(VitriaUtil.java:259)
      15:23:22,184 ERROR [STDERR] at com.covad.emailmgrservice.ejb.bean.EmailMgrBe
      an.sendEmail(EmailMgrBean.java:222)
      15:23:22,184 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(
      Native Method)
      15:23:22,184 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(N
      ativeMethodAccessorImpl.java:39)
      15:23:22,184 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invo
      ke(DelegatingMethodAccessorImpl.java:25)
      15:23:22,184 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:5
      85)


      Following is my sender class
      public class JmsUtil {
      
       private static InitialContext context=null;
       private static QueueSession session=null;
       private static QueueConnection conn=null;
      
      
       static {
      
       initVitria();
      
       }
      
      
      
       private static void initVitria() {
      
       try {
      
      
       Properties prop=new Properties();
       prop.setProperty(Constants.INITIAL_FACTORY, Constants.INITIAL_FACTORY_VALUE);
       prop.setProperty(Constants.URL_PACKAGE, Constants.URL_PACKAGE_VALUE);
       prop.setProperty(Constants.URL_PROVIDER,Constants.URL_PROVIDER_VALUE);
      
       context =new InitialContext(prop);
      
       QueueConnectionFactory connectionFactory=(QueueConnectionFactory)context.lookup("ConnectionFactory");
       conn=connectionFactory.createQueueConnection();
       session=conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      
       conn.start();
      
       } catch (Exception e) {
      
       e.printStackTrace();
      
       }
      
       }
      
      
      
      
      
       public static void emailTriggered(String emailType, Map emailAttributes)
      
       throws Exception {
      
      
      
       Vector list = new Vector();
      
      
      
       Iterator keys = emailAttributes.keySet().iterator();
      
      
      
       StringBuffer debugStringBuffer = new StringBuffer();
      
      
      
       while (keys.hasNext()) {
      
       String key = (String) keys.next();
      
       Object val = emailAttributes.get(key);
      
      
       NameValue nv;
      
      
       if (val == null) {
      
       nv = new NameValue(key, "");
       } else {
      
       nv = new NameValue(key, val.toString());
       }
      
       list.addElement(nv);
      
       }
      
      
       NameValue[] nvl = new NameValue[list.size()+2];
      
      
      
       for (int i = 0; i < list.size(); i++) {
       nvl = (NameValue) list.elementAt(i);
      
       }
      
      
       NameValue nv=new NameValue("emailType",emailType);
       nvl[list.size()]=nv;
      
       nv=new NameValue("orderId","-1");
       nvl[list.size()+1]=nv;
      
       System.out.println("inside VitriaUtil 1");
      
       ObjectMessage message =session.createObjectMessage(nvl);
      
       Queue queue=(Queue)context.lookup(Constants.QUEUE_NAME);
       QueueSender publisher=session.createSender(queue);
       publisher.send(message);
       publisher.close();
       closeConnection();
       System.out.println("message sent");
       }
      
       public static void closeConnection(){
       try{
       conn.close();
       }catch(Exception e){
       e.printStackTrace();
       }
       }
      
      
      
       }


      Is there something wrong in the code? or is it related something with size of Queue?
      I am using the default values for the creation of the Queue.
      And i am using Jboss-4.2.1G.A,jboss-messaging-1.3.0.GA and jboss-remoting-2_2_2_SP4.

      Please let me know.

        • 1. Re: Problem while publishing message to the Queue
          clebert.suconic

          It would be better if you could do some more investigation / debug and feed the forum with your own findings, then we could help you.

          I couldn't see anything wrong (at least not now.. but I'm not a virtual machine.. so I'm not 100% sure).

          The only thing I saw was... when you clod the connection, that will also close the producer automatically... so if you aways do connection.close(), you don't need to do producer.close(). (But that's not necessarily wrong).

          • 2. Re: Problem while publishing message to the Queue

            Hi,

            Thanks for the help.

            I found the problem.I am creating connection and session objects in a static block and closing the connection in instance method.

            when i comment the call to close the connection it is working fine.