Author: gnodet
Date: Thu Sep  7 04:51:33 2006
New Revision: 441058

URL: http://svn.apache.org/viewvc?view=rev&rev=441058
Log:
SM-566: JmsReceiverComponent trying to receive message before its JBI 
properties have been fully initialised

Modified:
    
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsInUsingJCABinding.java
    
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsReceiverComponent.java
    
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/JmsInUsingJCABinding.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsInUsingJCABinding.java?view=diff&rev=441058&r1=441057&r2=441058
==============================================================================
--- 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsInUsingJCABinding.java
 (original)
+++ 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsInUsingJCABinding.java
 Thu Sep  7 04:51:33 2006
@@ -54,9 +54,27 @@
         jcaConnector.setEndpointFactory(new SingletonEndpointFactory(this, 
transactionManager));
         try {
                jcaConnector.afterPropertiesSet();
+        } catch (Exception e) {
+               throw new JBIException("Unable to initialize jca connector", e);
+        }
+        super.init();
+    }
+    
+    public void start() throws JBIException {
+        try {
             jcaConnector.start();
         } catch (Exception e) {
-               throw new JBIException("Unable to start jca connector", e);
+            throw new JBIException("Unable to start jca connector", e);
+        }
+        super.start();
+    }
+    
+    public void stop() throws JBIException {
+        super.stop();
+        try {
+            jcaConnector.destroy();
+        } catch (Exception e) {
+            throw new JBIException("Unable to stop jca connector", e);
         }
     }
 

Modified: 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsReceiverComponent.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsReceiverComponent.java?view=diff&rev=441058&r1=441057&r2=441058
==============================================================================
--- 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsReceiverComponent.java
 (original)
+++ 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsReceiverComponent.java
 Thu Sep  7 04:51:33 2006
@@ -16,23 +16,24 @@
  */
 package org.apache.servicemix.components.jms;
 
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.jms.core.JmsTemplate;
-
+import javax.jbi.JBIException;
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.Destination;
+import javax.jms.JMSException;
 import javax.jms.MessageConsumer;
 import javax.jms.Session;
 
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.jms.core.JmsTemplate;
+
 /**
  * A component which uses a [EMAIL PROTECTED] JmsTemplate} to consume messages 
from a
  * destination.
  *
  * @version $Revision$
  */
-public class JmsReceiverComponent extends JmsInBinding implements 
InitializingBean, DisposableBean {
+public class JmsReceiverComponent extends JmsInBinding implements 
InitializingBean {
     private JmsTemplate template;
     private String selector;
     private MessageConsumer consumer;
@@ -88,12 +89,20 @@
         } else { // JMS 1.1 style
             consumer = session.createConsumer(defaultDestination, selector);
         }
-
-        consumer.setMessageListener(this);
-        connection.start();
+    }
+    
+    public void start() throws JBIException {
+        // Start receiving messages only when the component has actually been 
started.
+        super.start();
+        try {
+            connection.start();
+            consumer.setMessageListener(this);
+        } catch (JMSException e) {
+            throw new JBIException("Unable to start jms component");
+        }
     }
 
-    public void destroy() throws Exception {
+    public void stop() throws JBIException {
         try {
             if (connection != null) {
                 connection.close();
@@ -102,6 +111,8 @@
             } else if (consumer != null) {
                 consumer.close();
             }
+        } catch (JMSException e) {
+            throw new JBIException("Unable to stop jms component");
         } finally {
             connection = null;
             session = null;

Modified: 
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/jms/JmsServiceComponent.java?view=diff&rev=441058&r1=441057&r2=441058
==============================================================================
--- 
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
 Thu Sep  7 04:51:33 2006
@@ -34,11 +34,11 @@
 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;
 import org.springframework.jms.core.JmsTemplate;
@@ -51,7 +51,7 @@
  * 
  * @version $Revision$
  */
-public class JmsServiceComponent extends ComponentSupport implements 
MessageListener, InitializingBean, DisposableBean {
+public class JmsServiceComponent extends ComponentSupport implements 
MessageListener, InitializingBean {
     private static final Log log = 
LogFactory.getLog(JmsServiceComponent.class);
     private DestinationChooser destinationChooser;
     private JmsMarshaler marshaler = new JmsMarshaler();
@@ -115,16 +115,20 @@
         } else { // JMS 1.1 style
             consumer = session.createConsumer(defaultDestination, selector);
         }
+    }
 
-        consumer.setMessageListener(this);
-        connection.start();
+    public void start() throws JBIException {
+        // Start receiving messages only when the component has actually been 
started.
+        super.start();
+        try {
+            connection.start();
+            consumer.setMessageListener(this);
+        } catch (JMSException e) {
+            throw new JBIException("Unable to start jms component");
+        }
     }
 
-    /**
-     *  called by spring framework on disposal
-     * @throws Exception 
-     */
-    public void destroy() throws Exception {
+    public void stop() throws JBIException {
         try {
             if (connection != null) {
                 connection.close();
@@ -133,6 +137,8 @@
             } else if (consumer != null) {
                 consumer.close();
             }
+        } catch (JMSException e) {
+            throw new JBIException("Unable to stop jms component");
         } finally {
             connection = null;
             session = null;


Reply via email to