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 2008/09/16 14:49:14 UTC

svn commit: r695854 - in /servicemix/components/engines/servicemix-wsn2005/trunk/src: main/java/org/apache/servicemix/wsn/client/ main/java/org/apache/servicemix/wsn/component/ main/java/org/apache/servicemix/wsn/spring/ test/java/org/apache/servicemix...

Author: gnodet
Date: Tue Sep 16 05:49:14 2008
New Revision: 695854

URL: http://svn.apache.org/viewvc?rev=695854&view=rev
Log:
SM-1576: Change endpoints lifecycle to use activate / start / stop / deactivate

Modified:
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/client/AbstractWSAClient.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNDeployableEndpoint.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNServiceUnit.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/spring/PublisherComponent.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java
    servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNSpringComponentTest.java

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/client/AbstractWSAClient.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/client/AbstractWSAClient.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/client/AbstractWSAClient.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/client/AbstractWSAClient.java Tue Sep 16 05:49:14 2008
@@ -155,7 +155,10 @@
                 if (transformer == null) {
                     transformer = new SourceTransformer();
                 }
-                throw new JBIException(transformer.contentToString(exchange.getFault()));
+                String fault = transformer.contentToString(exchange.getFault());
+                exchange.setStatus(ExchangeStatus.DONE);
+                getContext().getDeliveryChannel().send(exchange);
+                throw new JBIException(fault);
             } else {
                 NormalizedMessage out = exchange.getOutMessage();
                 Source source = out.getContent();

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java Tue Sep 16 05:49:14 2008
@@ -44,6 +44,7 @@
 import org.apache.servicemix.common.Endpoint;
 import org.apache.servicemix.common.EndpointSupport;
 import org.apache.servicemix.common.ServiceUnit;
+import org.apache.servicemix.common.DefaultServiceUnit;
 import org.apache.servicemix.common.tools.wsdl.WSDLFlattener;
 import org.apache.servicemix.wsn.EndpointManager;
 import org.apache.servicemix.wsn.EndpointRegistrationException;
@@ -76,8 +77,7 @@
 
     public WSNComponent() {
         configuration = new WSNConfiguration();
-        serviceUnit = new ServiceUnit();
-        serviceUnit.setComponent(component);
+        serviceUnit = new DefaultServiceUnit(this);
     }
 
     public JbiNotificationBroker getNotificationBroker() {
@@ -287,12 +287,17 @@
             }
         }
 
-        public void unregister(Object endpoint) throws EndpointRegistrationException {
-            try {
-                WSNComponent.this.removeEndpoint((Endpoint) endpoint);
-            } catch (Exception e) {
-                throw new EndpointRegistrationException("Unable to activate endpoint", e);
-            }
+        public void unregister(final Object endpoint) throws EndpointRegistrationException {
+            WSNComponent.this.getExecutor().execute(new Runnable() {
+                public void run() {
+                    try {
+                        Endpoint ep = (Endpoint) endpoint;
+                        WSNComponent.this.removeEndpoint(ep);
+                    } catch (Exception e) {
+                        logger.error("Unable to deactivate endpoint", e);
+                    }
+                }
+            });
         }
 
     }

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNDeployableEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNDeployableEndpoint.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNDeployableEndpoint.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNDeployableEndpoint.java Tue Sep 16 05:49:14 2008
@@ -16,14 +16,15 @@
  */
 package org.apache.servicemix.wsn.component;
 
-import org.apache.servicemix.common.Endpoint;
-import org.apache.servicemix.common.ExchangeProcessor;
+import javax.jbi.messaging.MessageExchange;
+
+import org.apache.servicemix.common.endpoints.AbstractEndpoint;
 import org.apache.servicemix.wsn.EndpointManager;
 import org.apache.servicemix.wsn.EndpointRegistrationException;
 import org.apache.servicemix.wsn.jms.JmsCreatePullPoint;
 import org.apache.servicemix.wsn.jbi.JbiNotificationBroker;
 
-public abstract class WSNDeployableEndpoint extends Endpoint implements EndpointManager {
+public abstract class WSNDeployableEndpoint extends AbstractEndpoint implements EndpointManager {
 
     public JbiNotificationBroker getNotificationBroker() {
         return ((WSNComponent) serviceUnit.getComponent()).getNotificationBroker();
@@ -33,9 +34,7 @@
         return ((WSNComponent) serviceUnit.getComponent()).getCreatePullPoint();
     }
 
-    @Override
-    public ExchangeProcessor getProcessor() {
-        return null;
+    public void process(MessageExchange exchange) throws Exception {
     }
 
     public Object register(String address, Object service) throws EndpointRegistrationException {
@@ -45,4 +44,9 @@
     public void unregister(Object endpoint) throws EndpointRegistrationException {
     }
 
+    public void start() throws Exception {
+    }
+
+    public void stop() throws Exception {
+    }
 }

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java Tue Sep 16 05:49:14 2008
@@ -49,14 +49,13 @@
 
 import org.w3c.dom.Document;
 
-import org.apache.servicemix.common.ExchangeProcessor;
 import org.apache.servicemix.common.endpoints.ProviderEndpoint;
 import org.apache.servicemix.common.util.URIResolver;
 import org.apache.servicemix.wsn.ComponentContextAware;
 import org.apache.servicemix.wsn.jbi.JbiWrapperHelper;
 import org.oasis_open.docs.wsrf.bf_2.BaseFaultType;
 
-public class WSNEndpoint extends ProviderEndpoint implements ExchangeProcessor {
+public class WSNEndpoint extends ProviderEndpoint {
 
     protected String address;
 
@@ -75,11 +74,7 @@
     }
 
     @Override
-    public void start() throws Exception {
-        if (pojo instanceof ComponentContextAware) {
-            ((ComponentContextAware) pojo).setContext(getContext());
-        }
-        logger = this.serviceUnit.getComponent().getLogger();
+    public void activate() throws Exception {
         WebService ws = getWebServiceAnnotation(pojo.getClass());
         if (ws == null) {
             throw new IllegalStateException("Unable to find WebService annotation");
@@ -99,7 +94,10 @@
         if (ws != null) {
             interfaceName = new QName(ws.targetNamespace(), ws.name());
         }
-        super.start();
+        super.activate();
+        if (pojo instanceof ComponentContextAware) {
+            ((ComponentContextAware) pojo).setContext(getContext());
+        }
     }
 
     public static JAXBContext createJAXBContext(Class interfaceClass) throws JAXBException {

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNServiceUnit.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNServiceUnit.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNServiceUnit.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/component/WSNServiceUnit.java Tue Sep 16 05:49:14 2008
@@ -24,44 +24,89 @@
 
 import org.apache.servicemix.common.ServiceUnit;
 import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.common.DefaultServiceUnit;
 
-public class WSNServiceUnit extends ServiceUnit {
+public class WSNServiceUnit extends DefaultServiceUnit {
 
-    public void start() throws Exception {
-        List<Endpoint> activated = new ArrayList<Endpoint>();
-        try {
-            for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
-                Endpoint endpoint = (Endpoint) iter.next();
-                if (endpoint instanceof WSNPullPointEndpoint) {
-                    endpoint.activate();
-                    activated.add(endpoint);
+    @Override
+    public void init() throws Exception {
+        if (this.status == LifeCycleMBean.SHUTDOWN) {
+            List<Endpoint> activated = new ArrayList<Endpoint>();
+            try {
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNPullPointEndpoint) {
+                        endpoint.activate();
+                        activated.add(endpoint);
+                    }
                 }
-            }
-            for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
-                Endpoint endpoint = (Endpoint) iter.next();
-                if (endpoint instanceof WSNSubscriptionEndpoint) {
-                    endpoint.activate();
-                    activated.add(endpoint);
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNSubscriptionEndpoint) {
+                        endpoint.activate();
+                        activated.add(endpoint);
+                    }
                 }
-            }
-            for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
-                Endpoint endpoint = (Endpoint) iter.next();
-                if (endpoint instanceof WSNPublisherEndpoint) {
-                    endpoint.activate();
-                    activated.add(endpoint);
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNPublisherEndpoint) {
+                        endpoint.activate();
+                        activated.add(endpoint);
+                    }
                 }
+                this.status = LifeCycleMBean.STOPPED;
+            } catch (Exception e) {
+                // Deactivate activated endpoints
+                for (Endpoint endpoint : activated) {
+                    try {
+                        endpoint.deactivate();
+                    } catch (Exception e2) {
+                        // do nothing
+                    }
+                }
+                throw e;
             }
-            this.status = LifeCycleMBean.STARTED;
-        } catch (Exception e) {
-            // Deactivate activated endpoints
-            for (Endpoint endpoint : activated) {
-                try {
-                    endpoint.deactivate();
-                } catch (Exception e2) {
-                    // do nothing
+        }
+    }
+
+    @Override
+    public void start() throws Exception {
+        if (this.status == LifeCycleMBean.STOPPED) {
+            List<Endpoint> started = new ArrayList<Endpoint>();
+            try {
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNPullPointEndpoint) {
+                        endpoint.start();
+                        started.add(endpoint);
+                    }
+                }
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNSubscriptionEndpoint) {
+                        endpoint.start();
+                        started.add(endpoint);
+                    }
+                }
+                for (Iterator iter = getEndpoints().iterator(); iter.hasNext();) {
+                    Endpoint endpoint = (Endpoint) iter.next();
+                    if (endpoint instanceof WSNPublisherEndpoint) {
+                        endpoint.start();
+                        started.add(endpoint);
+                    }
+                }
+                this.status = LifeCycleMBean.STARTED;
+            } catch (Exception e) {
+                // Deactivate activated endpoints
+                for (Endpoint endpoint : started) {
+                    try {
+                        endpoint.stop();
+                    } catch (Exception e2) {
+                        // do nothing
+                    }
                 }
+                throw e;
             }
-            throw e;
         }
     }
 

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/spring/PublisherComponent.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/spring/PublisherComponent.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/spring/PublisherComponent.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/main/java/org/apache/servicemix/wsn/spring/PublisherComponent.java Tue Sep 16 05:49:14 2008
@@ -113,6 +113,7 @@
      * @see javax.jbi.management.LifeCycleMBean#start()
      */
     public void start() throws JBIException {
+        // TODO: do we really need to that in another thread ?
         new Thread() {
             public void run() {
                 try {

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java Tue Sep 16 05:49:14 2008
@@ -115,7 +115,7 @@
         assertEquals(1, ses.length);
     }
 
-    public void testInvalidSubscribription() throws Exception {
+    public void testInvalidSubscription() throws Exception {
         try {
             wsnBroker.subscribe(null, null, null);
             fail("Expected an exception");
@@ -318,7 +318,7 @@
         File path = new File(new URI(url.toString()));
         path = path.getParentFile();
         wsnComponent.getServiceUnitManager().deploy("pullpoint", path.getAbsolutePath());
-
+        wsnComponent.getServiceUnitManager().init("pullpoint", path.getAbsolutePath());
         wsnComponent.getServiceUnitManager().start("pullpoint");
 
         wsnBroker.notify("myTopic", parse("<hello>world</hello>"));
@@ -342,6 +342,7 @@
         consumer.setComponent(receiver);
         jbi.activateComponent(consumer);
 
+        wsnComponent.getServiceUnitManager().init("subscription", path.getAbsolutePath());
         wsnComponent.getServiceUnitManager().start("subscription");
 
         wsnBroker.notify("myTopic", parse("<hello>world</hello>"));
@@ -351,12 +352,14 @@
         receiver.getMessageList().flushMessages();
 
         wsnComponent.getServiceUnitManager().stop("subscription");
+        wsnComponent.getServiceUnitManager().shutDown("subscription");
 
         wsnBroker.notify("myTopic", parse("<hello>world</hello>"));
         // Wait for notification
         Thread.sleep(500);
         assertEquals(0, receiver.getMessageList().flushMessages().size());
 
+        wsnComponent.getServiceUnitManager().init("subscription", path.getAbsolutePath());
         wsnComponent.getServiceUnitManager().start("subscription");
 
         wsnBroker.notify("myTopic", parse("<hello>world</hello>"));

Modified: servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNSpringComponentTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNSpringComponentTest.java?rev=695854&r1=695853&r2=695854&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNSpringComponentTest.java (original)
+++ servicemix/components/engines/servicemix-wsn2005/trunk/src/test/java/org/apache/servicemix/wsn/component/WSNSpringComponentTest.java Tue Sep 16 05:49:14 2008
@@ -28,6 +28,9 @@
     }
     
     public void test() throws Exception {
+        // Wait for the publisher to be registered
+        Thread.sleep(1000);
+
         Receiver receiver = (Receiver) jbi.getBean("receiver");
         receiver.getMessageList().assertMessagesReceived(1);
     }