[PATCH] JMSEventMessageListener does not work
---------------------------------------------

         Key: COCOON-1810
         URL: http://issues.apache.org/jira/browse/COCOON-1810
     Project: Cocoon
        Type: Bug
  Components: Blocks: JMS  
    Versions: 2.1.9-dev (current SVN)    
    Reporter: vincent Demay
 Attachments: jndi.properties

Event if the rigth jars are copied to WEB-INF/lib, JMSEventMessageListener does 
not work, it can not create a connection.

Here is a patch but it needs to copy the jndi.properties file from OpenJMS 
sample to the cocoon classPath (see attachement)

Index: 
/cvs/cocoon/cocoon_BRANCH_2_1_X/src/blocks/jms/java/org/apache/cocoon/components/jms/AbstractMessageListener.java
===================================================================
--- 
/cvs/cocoon/cocoon_BRANCH_2_1_X/src/blocks/jms/java/org/apache/cocoon/components/jms/AbstractMessageListener.java
   (revision 388114)
+++ 
/cvs/cocoon/cocoon_BRANCH_2_1_X/src/blocks/jms/java/org/apache/cocoon/components/jms/AbstractMessageListener.java
   (working copy)
@@ -15,6 +15,8 @@
  */
 package org.apache.cocoon.components.jms;
 
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
 import javax.jms.JMSException;
 import javax.jms.MessageListener;
 import javax.jms.Session;
@@ -22,6 +24,10 @@
 import javax.jms.TopicConnection;
 import javax.jms.TopicSession;
 import javax.jms.TopicSubscriber;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
 import org.apache.avalon.framework.activity.Disposable;
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
@@ -101,7 +107,7 @@
     private JMSConnectionManager m_connectionManager;
 
     /* our session */
-    private TopicSession m_session;
+    private Session m_session;
 
     /* our subscriber */
     private TopicSubscriber m_subscriber;
@@ -121,7 +127,7 @@
         m_connectionName = parameters.getParameter(CONNECTION_PARAM);
         m_topicName = parameters.getParameter(TOPIC_PARAM);
 
-        m_subscriptionId = parameters.getParameter(SUBSCRIPTION_ID_PARAM, 
null);
+        m_subscriptionId = parameters.getParameter(SUBSCRIPTION_ID_PARAM, 
"default_id"); //should not be null
         m_selector = parameters.getParameter(MESSAGE_SELECTOR_PARAM, null);
 
     }
@@ -168,26 +174,25 @@
         // concrete implementations may want to override this
         m_acknowledgeMode = Session.DUPS_OK_ACKNOWLEDGE;
 
-        // register this MessageListener with a TopicSubscriber
-        final TopicConnection connection = (TopicConnection) 
m_connectionManager.getConnection(m_connectionName);
-        if (connection != null) {
-            m_session = connection.createTopicSession(false, 
m_acknowledgeMode);
-            final Topic topic = m_session.createTopic(m_topicName);
-            if (m_subscriptionId != null) {
-                m_subscriber = m_session.createDurableSubscriber(topic, 
m_subscriptionId, m_selector, false);
-            }
-            else {
-                m_subscriber = m_session.createSubscriber(topic, m_selector, 
false);
-            }
+       Context context;
+               try {
+                       // The jndi.properties should be in the classpath
+                       // it will set up the connection (see OpenJMS samples)
+                       context = new InitialContext();
+                       String factoryName = "ConnectionFactory";
+               ConnectionFactory factory = (ConnectionFactory) 
context.lookup(factoryName);
+               Topic topic = (Topic) context.lookup(m_topicName);
+               Connection connection = factory.createConnection();
+               m_session = connection.createSession(
+                       false, Session.AUTO_ACKNOWLEDGE);
+               m_subscriber = m_session.createDurableSubscriber(
+                    topic, m_subscriptionId);
             m_subscriber.setMessageListener(this);
             // recover in case of reconnection
             m_session.recover();
-        }
-        else {
-            if (getLogger().isWarnEnabled()) {
-                getLogger().warn("Could not obtain JMS connection '" + 
m_connectionName + "'");
-            }
-        }
+               } catch (NamingException e) {
+                       getLogger().warn("Could not obtain JMS connection '" + 
m_connectionName + "'");
+               }
     }
 
     private void closeSubscriberAndSession() {


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira