You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/02/21 12:57:23 UTC

svn commit: r379433 - /incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java

Author: gnodet
Date: Tue Feb 21 03:57:18 2006
New Revision: 379433

URL: http://svn.apache.org/viewcvs?rev=379433&view=rev
Log:
JmsServiceComponent now asynchronously handles incoming message using a WorkManager

Modified:
    incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java

Modified: incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java?rev=379433&r1=379432&r2=379433&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java (original)
+++ incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java Tue Feb 21 03:57:18 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.servicemix.components.jms;
 
+import javax.jbi.JBIException;
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessageExchange;
@@ -28,10 +29,14 @@
 import javax.jms.MessageConsumer;
 import javax.jms.MessageListener;
 import javax.jms.Session;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkException;
+import javax.resource.spi.work.WorkManager;
 import javax.xml.transform.TransformerException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.servicemix.components.util.ComponentSupport;
+import org.apache.servicemix.jbi.framework.ComponentContextImpl;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.jms.JmsException;
@@ -55,6 +60,7 @@
     private ConnectionFactory connectionFactory;
     private Connection connection;
     private Session session;
+    private WorkManager workManager;
 
     /**
      * called by Spring framework after initialization
@@ -133,6 +139,14 @@
         }
     }
 
+    protected void init() throws JBIException {
+        if (workManager == null) {
+            ComponentContextImpl context = (ComponentContextImpl) getContext();
+            workManager = context.getWorkManager();
+        }
+        super.init();
+    }
+
     /**
      * @return Return the DestinationChooser
      */
@@ -199,11 +213,33 @@
         this.selector = selector;
     }
 
+     public WorkManager getWorkManager() {
+        return workManager;
+    }
+
+    public void setWorkManager(WorkManager workManager) {
+        this.workManager = workManager;
+    }
+
     /**
      * MessageListener implementation
      * @param jmsMessage 
      */
     public void onMessage(final Message jmsMessage) {
+        try {
+            workManager.scheduleWork(new Work() {
+                public void release() {
+                }
+                public void run() {
+                    handleMessage(jmsMessage);
+                }
+            });
+        } catch (WorkException e) {
+            log.error(e);
+        }
+    }
+    
+    protected void handleMessage(final Message jmsMessage) {
         try {
             final InOut messageExchange = getDeliveryChannel().createExchangeFactory().createInOutExchange();
             NormalizedMessage inMessage = messageExchange.createMessage();