[jbpm-commits] JBoss JBPM SVN: r6030 - in jbpm4/trunk/modules: test-cfg/src/test/java/org/jbpm/test/jms and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Dec 23 06:42:13 EST 2009


Author: tom.baeyens at jboss.com
Date: 2009-12-23 06:42:13 -0500 (Wed, 23 Dec 2009)
New Revision: 6030

Modified:
   jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestCase.java
   jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsExtensions.java
   jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsTopicListener.java
   jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/jms/JmsTopicTest.java
Log:
JBPM-2695 changed topic listener support from exposing a List to JmsTopicListener.getNextMessage(long timeout)

Modified: jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestCase.java
===================================================================
--- jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestCase.java	2009-12-23 10:44:10 UTC (rev 6029)
+++ jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestCase.java	2009-12-23 11:42:13 UTC (rev 6030)
@@ -126,14 +126,10 @@
     JmsExtensions.createTopic(connectionFactoryJndiName, topicJndiName);
   }
 
-  public static List<Object> jmsStartTopicListener(String connectionFactoryJndiName, String topicJndiName) {
-    return JmsExtensions.startTopicListener(connectionFactoryJndiName, topicJndiName);
+  public static JmsTopicListener jmsStartTopicListener(String connectionFactoryJndiName, String topicJndiName) {
+    return new JmsTopicListener(connectionFactoryJndiName, topicJndiName);
   }
 
-  public static void jmsStopTopicListener(String connectionFactoryJndiName, String topicJndiName) {
-    JmsExtensions.stopTopicListener(connectionFactoryJndiName, topicJndiName);
-  }
-
   public static void jmsRemoveTopic(String connectionFactoryJndiName, String topicJndiName) {
     JmsExtensions.removeTopic(connectionFactoryJndiName, topicJndiName);
   }

Modified: jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsExtensions.java
===================================================================
--- jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsExtensions.java	2009-12-23 10:44:10 UTC (rev 6029)
+++ jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsExtensions.java	2009-12-23 11:42:13 UTC (rev 6030)
@@ -22,7 +22,6 @@
 package org.jbpm.test;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.jms.Message;
@@ -141,22 +140,6 @@
     return jmsMockObjectFactory;
   }
 
-  public static List<Object> startTopicListener(String connectionFactoryJndiName, String topicJndiName) {
-    JmsTopicListener jmsTopicListener = JmsTopicListener.getJmsTopicListener(connectionFactoryJndiName, topicJndiName);
-    if (jmsTopicListener==null) {
-      jmsTopicListener = new JmsTopicListener(connectionFactoryJndiName, topicJndiName);
-    }
-    
-    return jmsTopicListener.getMessages();
-  }
-  
-  public static void stopTopicListener(String connectionFactoryJndiName, String topicJndiName) {
-    JmsTopicListener jmsTopicListener = JmsTopicListener.getJmsTopicListener(connectionFactoryJndiName, topicJndiName);
-    if (jmsTopicListener!=null) {
-      jmsTopicListener.stop();
-    }
-  }
-
   public static Object consumeMessageFromQueue(String connectionFactoryJndiName, String queueJndiName, boolean transacted, int acknowledgeMode, long timeout) {
     try {
       InitialContext context = new InitialContext();

Modified: jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsTopicListener.java
===================================================================
--- jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsTopicListener.java	2009-12-23 10:44:10 UTC (rev 6029)
+++ jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JmsTopicListener.java	2009-12-23 11:42:13 UTC (rev 6030)
@@ -37,45 +37,49 @@
 import javax.jms.TopicSubscriber;
 import javax.naming.InitialContext;
 
+import junit.framework.TestCase;
 
+import org.jbpm.internal.log.Log;
+
+
 /**
  * @author Tom Baeyens
  */
-public class JmsTopicListener implements MessageListener {
+public class JmsTopicListener {
+  
+  private static Log log = Log.getLog(JmsTopicListener.class.getName());
 
   static Map<Object, JmsTopicListener> topicListeners = new HashMap<Object, JmsTopicListener>();
   
+  String topicJndiName = null;
   TopicConnectionFactory topicConnectionFactory = null;
   Topic topic = null;
   TopicConnection topicConnection = null;
   TopicSession topicSession = null;
   TopicSubscriber topicSubscriber = null;
   
-  List<Object> messages = null;
+  List<Message> messages = null;
 
-  public void onMessage(Message message) {
-    messages.add(message);
-  }
-  
-  public static Object createJmsTopicListenerKey(String connectionFactoryJndiName, String topicJndiName) {
+  static Object createJmsTopicListenerKey(String connectionFactoryJndiName, String topicJndiName) {
     List<String> topicListenerKey = new ArrayList<String>();
     topicListenerKey.add(connectionFactoryJndiName);
     topicListenerKey.add(topicJndiName);
     return topicListenerKey;
   }
 
-  public static JmsTopicListener getJmsTopicListener(String connectionFactoryJndiName, String topicJndiName) {
+  static JmsTopicListener getJmsTopicListener(String connectionFactoryJndiName, String topicJndiName) {
     return topicListeners.get(createJmsTopicListenerKey(connectionFactoryJndiName, topicJndiName));
   }
 
-  public JmsTopicListener(String connectionFactoryJndiName, String topicJndiName) {
+  JmsTopicListener(String connectionFactoryJndiName, String topicJndiName) {
     start(connectionFactoryJndiName, topicJndiName);
     topicListeners.put(createJmsTopicListenerKey(connectionFactoryJndiName, topicJndiName), this);
   }
 
-  private void start(String connectionFactoryJndiName, String topicJndiName) {
+  void start(String connectionFactoryJndiName, String topicJndiName) {
     try {
-      messages = Collections.synchronizedList(new ArrayList<Object>());
+      messages = Collections.synchronizedList(new ArrayList<Message>());
+      this.topicJndiName = topicJndiName;
 
       InitialContext context = new InitialContext();
       topicConnectionFactory = (TopicConnectionFactory) context.lookup(connectionFactoryJndiName);
@@ -83,7 +87,7 @@
       topicConnection = topicConnectionFactory.createTopicConnection();
       topicSession = topicConnection.createTopicSession(true, QueueSession.AUTO_ACKNOWLEDGE);
       topicSubscriber = topicSession.createSubscriber(topic);
-      topicSubscriber.setMessageListener(this);
+      topicSubscriber.setMessageListener(new Listener());
 
       topicConnection.start();
 
@@ -93,6 +97,12 @@
     }
   }
 
+  private class Listener implements MessageListener {
+    public void onMessage(Message message) {
+      messages.add(message);
+    }
+  }
+
   public void stop() {
     if (topicConnection!=null) {
       try {
@@ -127,7 +137,20 @@
     }
   }
 
-  public List<Object> getMessages() {
-    return messages;
+  public Message getNextMessage(long timeout) {
+    long start = System.currentTimeMillis();
+    while (true) {
+      if (!messages.isEmpty()) {
+        return messages.remove(0);
+      }
+      if (System.currentTimeMillis()-start > timeout) {
+        TestCase.fail("no message for topic "+topicJndiName);
+      }
+      try {
+        Thread.sleep(200);
+      } catch (InterruptedException e) {
+        log.info("waiting for next message got interrupted");
+      }
+    }
   }
 }

Modified: jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/jms/JmsTopicTest.java
===================================================================
--- jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/jms/JmsTopicTest.java	2009-12-23 10:44:10 UTC (rev 6029)
+++ jbpm4/trunk/modules/test-cfg/src/test/java/org/jbpm/test/jms/JmsTopicTest.java	2009-12-23 11:42:13 UTC (rev 6030)
@@ -21,11 +21,10 @@
  */
 package org.jbpm.test.jms;
 
-import java.util.List;
-
 import javax.jms.MapMessage;
 
 import org.jbpm.test.JbpmCustomCfgTestCase;
+import org.jbpm.test.JmsTopicListener;
 
 
 /**
@@ -34,7 +33,7 @@
 public class JmsTopicTest extends JbpmCustomCfgTestCase {
 
   String deploymentId;
-  List<Object> messages;
+  JmsTopicListener jmsTopicListener;
   
   protected void setUp() throws Exception {
     super.setUp();
@@ -44,11 +43,11 @@
         .deploy();
     
     jmsCreateTopic("jms/ConnectionFactory", "topic/ProductTopic");
-    messages = jmsStartTopicListener("jms/ConnectionFactory", "topic/ProductTopic");
+    jmsTopicListener = jmsStartTopicListener("jms/ConnectionFactory", "topic/ProductTopic");
   }
 
   protected void tearDown() throws Exception {
-    jmsStopTopicListener("jms/ConnectionFactory", "topic/ProductTopic");
+    jmsTopicListener.stop();
     jmsRemoveTopic("jms/ConnectionFactory", "topic/ProductTopic");
 
     repositoryService.deleteDeploymentCascade(deploymentId);
@@ -59,9 +58,7 @@
   public void testTestTopicMessage() throws Exception {
     executionService.startProcessInstanceByKey("JmsTopic");
     
-    assertEquals(messages.toString(), 1, messages.size());
-
-    MapMessage mapMessage = (MapMessage) messages.get(0);
+    MapMessage mapMessage = (MapMessage) jmsTopicListener.getNextMessage(1000);
     assertEquals("shampoo", mapMessage.getString("product"));
   }
 



More information about the jbpm-commits mailing list