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/12/11 16:14:58 UTC

svn commit: r725709 - in /servicemix/smx4/nmr/trunk: ./ jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ jb...

Author: gnodet
Date: Thu Dec 11 07:14:57 2008
New Revision: 725709

URL: http://svn.apache.org/viewvc?rev=725709&view=rev
Log:
SMX4NMR-55: Ensure a clean shutdown of service assemblies

Added:
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AssemblyReferencesListener.java
Modified:
    servicemix/smx4/nmr/trunk/jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ShutdownCommand.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceAssembly.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
    servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml
    servicemix/smx4/nmr/trunk/jbi/itests/pom.xml
    servicemix/smx4/nmr/trunk/jbi/itests/src/test/java/org/apache/servicemix/jbi/IntegrationTest.java
    servicemix/smx4/nmr/trunk/jbi/itests/src/test/resources/org/apache/servicemix/MANIFEST.MF
    servicemix/smx4/nmr/trunk/jbi/runtime/pom.xml
    servicemix/smx4/nmr/trunk/nmr/api/src/main/java/org/apache/servicemix/nmr/api/internal/InternalEndpoint.java
    servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/ClientChannel.java
    servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/EndpointRegistryImpl.java
    servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/InternalEndpointWrapper.java
    servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java
    servicemix/smx4/nmr/trunk/pom.xml

Modified: servicemix/smx4/nmr/trunk/jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ShutdownCommand.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ShutdownCommand.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ShutdownCommand.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/commands/src/main/java/org/apache/servicemix/jbi/commands/ShutdownCommand.java Thu Dec 11 07:14:57 2008
@@ -19,12 +19,27 @@
 import javax.jbi.JBIException;
 import javax.jbi.management.LifeCycleMBean;
 
+import org.apache.geronimo.gshell.clp.Option;
+import org.apache.servicemix.jbi.deployer.ServiceAssembly;
+import org.apache.servicemix.jbi.deployer.Component;
+
 /**
  * Shutdown a JBI artifact
  */
 public class ShutdownCommand extends JbiLifeCycleCommandSupport {
 
+    @Option(name = "--force")
+    private boolean force;
+
     protected void handle(LifeCycleMBean artifact) throws JBIException {
-        artifact.shutDown();
+        if (force) {
+            if (artifact instanceof ServiceAssembly) {
+                ((ServiceAssembly) artifact).forceShutDown();
+            } else if (artifact instanceof Component) {
+                ((Component) artifact).forceShutDown();
+            }
+        } else {
+            artifact.shutDown();
+        }
     }
 }
\ No newline at end of file

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/Component.java Thu Dec 11 07:14:57 2008
@@ -17,6 +17,7 @@
 package org.apache.servicemix.jbi.deployer;
 
 import javax.jbi.management.ComponentLifeCycleMBean;
+import javax.jbi.JBIException;
 
 /**
  * Represents a JBI component.
@@ -45,4 +46,11 @@
      * Retrieve the ServiceUnits deployed on this component 
      */
     ServiceUnit[] getServiceUnits();
+
+    /**
+     * Force a shutdown of this component
+     *
+     * @throws javax.jbi.JBIException
+     */
+    void forceShutDown() throws JBIException;
 }

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceAssembly.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceAssembly.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceAssembly.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/ServiceAssembly.java Thu Dec 11 07:14:57 2008
@@ -43,4 +43,10 @@
      */
     ServiceUnit[] getServiceUnits();
 
+    /**
+     * Force a shutdown of this service assembly
+     *
+     * @throws JBIException
+     */
+    void forceShutDown() throws JBIException;
 }

Added: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AssemblyReferencesListener.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AssemblyReferencesListener.java?rev=725709&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AssemblyReferencesListener.java (added)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AssemblyReferencesListener.java Thu Dec 11 07:14:57 2008
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.jbi.deployer.impl;
+
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.List;
+
+import org.apache.servicemix.nmr.api.event.EndpointListener;
+import org.apache.servicemix.nmr.api.event.ExchangeListener;
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
+import org.apache.servicemix.nmr.api.internal.InternalExchange;
+import org.apache.servicemix.nmr.api.Exchange;
+import org.apache.servicemix.nmr.api.Status;
+import org.apache.servicemix.nmr.api.Role;
+import org.apache.servicemix.jbi.deployer.ServiceAssembly;
+
+/**
+ * This class will listen for endpoints activated and link them to service assemblies.
+ * This only work if the endpoint is activated synchronously during a call to the SU
+ * init() or start() method, but this should always be the case.
+ * When an exchange is sent or received, the source / destination endpoint of the exchange
+ * are retrieved, and their associated service assembly counter is incremented.
+ * When a SA is cleanly shutdown, we wait for the reference count to be 0.
+ */
+public class AssemblyReferencesListener implements EndpointListener, ExchangeListener {
+
+    private final ThreadLocal<ServiceAssembly> assembly = new ThreadLocal<ServiceAssembly>();
+    private final ConcurrentMap<InternalEndpoint, ServiceAssembly> endpoints =
+                new ConcurrentHashMap<InternalEndpoint, ServiceAssembly>();
+    private final ConcurrentMap<ServiceAssembly, AtomicInteger> references =
+                new ConcurrentHashMap<ServiceAssembly, AtomicInteger>();
+
+    public void setAssembly(ServiceAssembly assembly) {
+        this.assembly.set(assembly);
+    }
+
+    public void forget(ServiceAssembly assembly) {
+        for (ConcurrentMap.Entry<InternalEndpoint, ServiceAssembly> entry : endpoints.entrySet()) {
+            if (entry.getValue() == assembly) {
+                endpoints.remove(entry.getKey());
+            }
+        }
+        AtomicInteger count = references.remove(assembly);
+        if (count != null) {
+            count.set(0);
+            synchronized (assembly) {
+                assembly.notifyAll();
+            }
+        }
+    }
+
+    public void endpointRegistered(InternalEndpoint endpoint) {
+        ServiceAssembly assembly = this.assembly.get();
+        if (assembly != null) {
+            endpoints.put(endpoint, assembly);
+            if (references.get(assembly) == null) {
+                references.put(assembly, new AtomicInteger());
+            }
+        }
+    }
+
+    public void endpointUnregistered(InternalEndpoint endpoint) {
+        endpoints.remove(endpoint);
+    }
+
+    public void exchangeSent(Exchange exchange) {
+        // Check if this is a new exchange
+        if (exchange.getStatus() == Status.Active && exchange.getRole() == Role.Consumer &&
+                exchange.getOut(false) == null && exchange.getFault(false) == null) {
+            if (exchange instanceof InternalExchange) {
+                // Increment reference to the source SA
+                InternalExchange ie = (InternalExchange) exchange;
+                reference(endpoints.get(ie.getSource()));
+            }
+        }
+    }
+
+    public void exchangeDelivered(Exchange exchange) {
+        // Check if the exchange is finished
+        if (exchange.getStatus() != Status.Active) {
+            if (exchange instanceof InternalExchange) {
+                InternalExchange ie = (InternalExchange) exchange;
+                // Decrement references to source and destination SA
+                unreference(endpoints.get(ie.getSource()));
+                unreference(endpoints.get(ie.getDestination()));
+            }
+        // Check if this is a new exchange
+        } else if (exchange.getStatus() == Status.Active && exchange.getRole() == Role.Provider &&
+                    exchange.getOut(false) == null && exchange.getFault(false) == null) {
+            if (exchange instanceof InternalExchange) {
+                // Increment reference to the destination SA
+                InternalExchange ie = (InternalExchange) exchange;
+                reference(endpoints.get(ie.getDestination()));
+            }
+        }
+    }
+
+    public void waitFor(ServiceAssembly assembly) throws InterruptedException{
+        if (assembly != null) {
+            AtomicInteger count = references.get(assembly);
+            if (count != null) {
+                if (count.get() != 0) {
+                    synchronized (assembly) {
+                        while (count.get() != 0) {
+                            assembly.wait(Long.MAX_VALUE);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void reference(ServiceAssembly assembly) {
+        if (assembly != null) {
+            AtomicInteger count = references.get(assembly);
+            if (count != null) {
+                count.incrementAndGet();
+            }
+        }
+    }
+
+    private void unreference(ServiceAssembly assembly) {
+        if (assembly != null) {
+            AtomicInteger count = references.get(assembly);
+            if (count != null) {
+                if (count.decrementAndGet() == 0) {
+                    synchronized (assembly) {
+                        assembly.notifyAll();
+                    }
+                }
+            }
+        }
+    }
+
+}

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentImpl.java Thu Dec 11 07:14:57 2008
@@ -151,10 +151,14 @@
     }
 
     public void shutDown() throws JBIException {
-        shutDown(true);
+        shutDown(true, false);
     }
 
-    public void shutDown(boolean saveState) throws JBIException {
+    public void forceShutDown() throws JBIException {
+        shutDown(true, true);
+    }
+
+    public void shutDown(boolean saveState, boolean force) throws JBIException {
         LOGGER.info("Shutting down component " + getName());
         if (state == State.Started) {
             stop(saveState);
@@ -164,7 +168,7 @@
             for (ServiceAssemblyImpl sa : getServiceAssemblies()) {
                 if (sa.getState() == ServiceAssemblyImpl.State.Stopped
                         || sa.getState() == ServiceAssemblyImpl.State.Initialized) {
-                    sa.shutDown(false);
+                    sa.shutDown(false, force);
                 }
             }
             // Shutdown component

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java Thu Dec 11 07:14:57 2008
@@ -95,6 +95,7 @@
     private ServiceTracker tracker;
 
     private ServiceTracker deployedAssembliesTracker;
+    private AssemblyReferencesListener endpointListener;
 
     public Deployer() throws JBIException{
         sharedLibraries = new ConcurrentHashMap<String, SharedLibraryImpl>();
@@ -124,6 +125,14 @@
         this.autoStart = autoStart;
     }
 
+    public void setEndpointListener(AssemblyReferencesListener endpointListener) {
+        this.endpointListener = endpointListener;
+    }
+
+    public AssemblyReferencesListener getEndpointListener() {
+        return endpointListener;
+    }
+
     @Override
     public void afterPropertiesSet() throws Exception {
         super.afterPropertiesSet();
@@ -350,7 +359,7 @@
     protected void registerSA(ServiceAssemblyDesc serviceAssembyDesc, Bundle bundle, List<ServiceUnitImpl> sus) throws JBIException {
         // Now create the SA and initialize it
         Preferences prefs = preferencesService.getUserPreferences(serviceAssembyDesc.getIdentification().getName());
-        ServiceAssemblyImpl sa = new ServiceAssemblyImpl(serviceAssembyDesc, sus, prefs, autoStart);
+        ServiceAssemblyImpl sa = new ServiceAssemblyImpl(serviceAssembyDesc, sus, prefs, endpointListener, autoStart);
         sa.init();
         serviceAssemblies.put(sa.getName(), sa);
         // populate props from the component meta-data
@@ -382,7 +391,7 @@
                 component.stop(false);
             }
             if (component.getState() == ComponentImpl.State.Stopped) {
-                component.shutDown(false);
+                component.shutDown(false, false);
             }
             File file = new File(System.getProperty("servicemix.base"), "data/jbi/" + name);
             FileUtil.deleteFile(file);
@@ -400,7 +409,7 @@
                 sa.stop(false);
             }
             if (sa.getState() == ServiceAssemblyImpl.State.Stopped) {
-                sa.shutDown(false);
+                sa.shutDown(false, false);
             }
             for (ServiceUnit su : sa.getServiceUnits()) {
                 ((ServiceUnitImpl) su).undeploy();
@@ -438,7 +447,7 @@
             if (ci != null) {
                 try {
                     ci.stop(false);
-                    ci.shutDown(false);
+                    ci.shutDown(false, false);
                 } catch (JBIException e) {
                     LOGGER.warn("Error when shutting down component", e);
                 }

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyImpl.java Thu Dec 11 07:14:57 2008
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.jbi.JBIException;
 import javax.jbi.management.LifeCycleMBean;
@@ -27,6 +28,8 @@
 import org.apache.servicemix.jbi.deployer.ServiceAssembly;
 import org.apache.servicemix.jbi.deployer.ServiceUnit;
 import org.apache.servicemix.jbi.deployer.descriptor.ServiceAssemblyDesc;
+import org.apache.servicemix.nmr.api.event.EndpointListener;
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
 import org.osgi.service.prefs.Preferences;
 import org.osgi.service.prefs.BackingStoreException;
 
@@ -47,23 +50,27 @@
         Shutdown,
     }
 
-	private ServiceAssemblyDesc serviceAssemblyDesc;
+	private final ServiceAssemblyDesc serviceAssemblyDesc;
 
-    private List<ServiceUnitImpl> serviceUnits;
+    private final List<ServiceUnitImpl> serviceUnits;
 
-    private State state = State.Unknown;
+    private final Preferences prefs;
 
-    private Preferences prefs;
+    private final AssemblyReferencesListener listener;
 
     private State runningState;
 
+    private State state = State.Unknown;
+
     public ServiceAssemblyImpl(ServiceAssemblyDesc serviceAssemblyDesc,
                                List<ServiceUnitImpl> serviceUnits,
                                Preferences prefs,
+                               AssemblyReferencesListener listener,
                                boolean autoStart) {
 		this.serviceAssemblyDesc = serviceAssemblyDesc;
         this.serviceUnits = serviceUnits;
         this.prefs = prefs;
+        this.listener = listener;
         this.runningState = State.valueOf(this.prefs.get(STATE, (autoStart ? State.Started : State.Initialized).name()));
         for (ServiceUnitImpl su : serviceUnits) {
             su.setServiceAssemblyImpl(this);
@@ -100,15 +107,20 @@
         }
     }
 
-    public void init() throws JBIException {
-        transition(State.Initialized);
-        if (runningState == State.Started) {
-            transition(State.Started);
-        } else if (runningState == State.Stopped) {
-            transition(State.Started);
-            transition(State.Stopped);
-        } else if (runningState == State.Shutdown) {
-            transition(State.Shutdown);
+    public synchronized void init() throws JBIException {
+        listener.setAssembly(this);
+        try {
+            transition(State.Initialized);
+            if (runningState == State.Started) {
+                transition(State.Started);
+            } else if (runningState == State.Stopped) {
+                transition(State.Started);
+                transition(State.Stopped);
+            } else if (runningState == State.Shutdown) {
+                transition(State.Shutdown);
+            }
+        } finally {
+            listener.setAssembly(null);
         }
     }
 
@@ -116,10 +128,21 @@
         start(true);
     }
 
-    public void start(boolean persist) throws JBIException {
-        transition(State.Started);
-        if (persist) {
-            saveState();
+    public synchronized void start(boolean persist) throws JBIException {
+        listener.setAssembly(this);
+        try {
+            if (state == State.Started) {
+                return;
+            }
+            if (state == State.Shutdown) {
+                transition(State.Initialized);
+            }
+            transition(State.Started);
+            if (persist) {
+                saveState();
+            }
+        } finally {
+            listener.setAssembly(null);
         }
     }
 
@@ -127,21 +150,59 @@
         stop(true);
 	}
 
-    public void stop(boolean persist) throws JBIException {
-        transition(State.Stopped);
-        if (persist) {
-            saveState();
+    public synchronized void stop(boolean persist) throws JBIException {
+        listener.setAssembly(this);
+        try {
+            if (state == State.Stopped) {
+                return;
+            }
+            if (state == State.Shutdown) {
+                transition(State.Initialized);
+            }
+            if (state == State.Started) {
+                transition(State.Stopped);
+            }
+            if (persist) {
+                saveState();
+            }
+        } finally {
+            listener.setAssembly(null);
         }
     }
 
     public void shutDown() throws JBIException {
-        shutDown(true);
+        shutDown(true, false);
     }
 
-    public void shutDown(boolean persist) throws JBIException {
-        transition(State.Shutdown);
-        if (persist) {
-            saveState();
+    public void forceShutDown() throws JBIException {
+        shutDown(true, true);
+    }
+
+    public synchronized void shutDown(boolean persist, boolean force) throws JBIException {
+        listener.setAssembly(this);
+        try {
+            if (state == State.Shutdown) {
+                return;
+            }
+            if (state == State.Started) {
+                transition(State.Stopped);
+            }
+            if (!force) {
+                for (;;) {
+                    try {
+                        listener.waitFor(this);
+                        break;
+                    } catch (InterruptedException e) {
+                    }
+                }
+            }
+            transition(State.Shutdown);
+            if (persist) {
+                saveState();
+            }
+        } finally {
+            listener.setAssembly(null);
+            listener.forget(this);
         }
     }
 

Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/resources/META-INF/spring/servicemix-jbi-deployer.xml Thu Dec 11 07:14:57 2008
@@ -33,8 +33,12 @@
     <bean id="deployer" class="org.apache.servicemix.jbi.deployer.impl.Deployer">
         <property name="preferencesService" ref="preferencesService" />
         <property name="autoStart" value="true" />
+        <property name="endpointListener" ref="endpointListener" />
     </bean>
 
+    <!-- Endpoint listener -->
+    <bean id="endpointListener" class="org.apache.servicemix.jbi.deployer.impl.AssemblyReferencesListener" />
+
     <!-- Deployment listener -->
     <bean id="listener" class="org.apache.servicemix.jbi.deployer.handler.JBIDeploymentListener" />
     
@@ -53,4 +57,12 @@
 
     <osgi:service ref="listener" interface="org.apache.servicemix.kernel.filemonitor.DeploymentListener" />
 
+    <osgi:service ref="endpointListener">
+        <osgi:interfaces>
+            <value>org.apache.servicemix.nmr.api.event.Listener</value>
+            <value>org.apache.servicemix.nmr.api.event.EndpointListener</value>
+            <value>org.apache.servicemix.nmr.api.event.ExchangeListener</value>
+        </osgi:interfaces>
+    </osgi:service>
+
 </beans>

Modified: servicemix/smx4/nmr/trunk/jbi/itests/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/itests/pom.xml?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/itests/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/jbi/itests/pom.xml Thu Dec 11 07:14:57 2008
@@ -70,8 +70,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.ant</artifactId>
-            <version>${ant.version}</version>
+            <artifactId>org.apache.servicemix.bundles.woodstox</artifactId>
+            <version>${woodstox.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.nmr</groupId>
@@ -141,8 +141,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix</groupId>
-            <artifactId>servicemix-shared-compat</artifactId>
-            <version>${servicemix3.shared.compat.version}</version>
+            <artifactId>servicemix-shared</artifactId>
+            <version>${servicemix.shared.version}</version>
             <classifier>installer</classifier>
             <type>zip</type>
             <exclusions>
@@ -163,14 +163,14 @@
         <dependency>
             <groupId>org.apache.servicemix</groupId>
             <artifactId>servicemix-eip</artifactId>
-            <version>${servicemix3.component.version}</version>
+            <version>${servicemix.eip.version}</version>
             <classifier>installer</classifier>
             <type>zip</type>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix</groupId>
             <artifactId>servicemix-jsr181</artifactId>
-            <version>${servicemix3.component.version}</version>
+            <version>${servicemix.jsr181.version}</version>
             <classifier>installer</classifier>
             <type>zip</type>
             <exclusions>
@@ -187,7 +187,7 @@
         <dependency>
             <groupId>org.apache.servicemix</groupId>
             <artifactId>servicemix-http</artifactId>
-            <version>${servicemix3.component.version}</version>
+            <version>${servicemix.http.version}</version>
             <classifier>installer</classifier>
             <type>zip</type>
         </dependency>
@@ -213,6 +213,11 @@
             <version>${geronimo.jta.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-javamail_1.4_spec</artifactId>
+            <version>${geronimo.javamail.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.servicemix.specs</groupId>
             <artifactId>org.apache.servicemix.specs.stax-api-1.0</artifactId>
             <version>${servicemix.specs.version}</version>
@@ -252,29 +257,29 @@
                             <artifactItems>
                                 <artifactItem>
                                     <groupId>org.apache.servicemix</groupId>
-                                    <artifactId>servicemix-shared-compat</artifactId>
-                                    <version>${servicemix3.shared.compat.version}</version>
+                                    <artifactId>servicemix-shared</artifactId>
+                                    <version>${servicemix.shared.version}</version>
                                     <classifier>installer</classifier>
                                     <type>zip</type>
                                 </artifactItem>
                                 <artifactItem>
                                     <groupId>org.apache.servicemix</groupId>
                                     <artifactId>servicemix-eip</artifactId>
-                                    <version>${servicemix3.component.version}</version>
+                                    <version>${servicemix.eip.version}</version>
                                     <classifier>installer</classifier>
                                     <type>zip</type>
                                 </artifactItem>
                                 <artifactItem>
                                     <groupId>org.apache.servicemix</groupId>
                                     <artifactId>servicemix-jsr181</artifactId>
-                                    <version>${servicemix3.component.version}</version>
+                                    <version>${servicemix.jsr181.version}</version>
                                     <classifier>installer</classifier>
                                     <type>zip</type>
                                 </artifactItem>
                                 <artifactItem>
                                     <groupId>org.apache.servicemix</groupId>
                                     <artifactId>servicemix-http</artifactId>
-                                    <version>${servicemix3.component.version}</version>
+                                    <version>${servicemix.http.version}</version>
                                     <classifier>installer</classifier>
                                     <type>zip</type>
                                 </artifactItem>

Modified: servicemix/smx4/nmr/trunk/jbi/itests/src/test/java/org/apache/servicemix/jbi/IntegrationTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/itests/src/test/java/org/apache/servicemix/jbi/IntegrationTest.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/itests/src/test/java/org/apache/servicemix/jbi/IntegrationTest.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/itests/src/test/java/org/apache/servicemix/jbi/IntegrationTest.java Thu Dec 11 07:14:57 2008
@@ -18,11 +18,18 @@
 
 import java.io.File;
 import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
+import java.net.URL;
+import java.net.URLConnection;
 
 import javax.jbi.component.Component;
 
 import org.apache.servicemix.nmr.api.NMR;
 import org.apache.servicemix.kernel.testing.support.AbstractIntegrationTest;
+import org.apache.servicemix.jbi.deployer.ServiceAssembly;
+import org.apache.servicemix.jbi.deployer.handler.JBIDeploymentListener;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 
 public class IntegrationTest extends AbstractIntegrationTest {
 
@@ -59,6 +66,7 @@
             getBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.stax-api-1.0"),
             getBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.jbi-api-1.0"),
             getBundle("org.apache.geronimo.specs", "geronimo-activation_1.1_spec"),
+            getBundle("org.apache.geronimo.specs", "geronimo-javamail_1.4_spec"),
             getBundle("org.apache.geronimo.specs", "geronimo-jta_1.1_spec"),
             getBundle("org.apache.felix", "org.apache.felix.prefs"),
             getBundle("org.apache.xbean", "xbean-classloader"),
@@ -71,7 +79,7 @@
             getBundle("org.apache.servicemix.jbi", "org.apache.servicemix.jbi.deployer"),
             getBundle("org.apache.servicemix.jbi", "org.apache.servicemix.jbi.osgi"),
             getBundle("org.apache.servicemix.kernel", "org.apache.servicemix.kernel.filemonitor"),
-            getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.ant"),
+            getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.woodstox"),
 		};
 	}
 
@@ -79,26 +87,72 @@
         System.out.println("Waiting for NMR");
         NMR nmr = getOsgiService(NMR.class);
         assertNotNull(nmr);
-        installBundle("org.apache.servicemix", "servicemix-shared-compat", "installer", "zip");
-        installBundle("org.apache.servicemix", "servicemix-eip", "installer", "zip");
+        installJbiBundle("org.apache.servicemix", "servicemix-shared", "installer", "zip");
+        installJbiBundle("org.apache.servicemix", "servicemix-eip", "installer", "zip");
         System.out.println("Waiting for JBI Component");
-        Component cmp = (Component) getOsgiService(Component.class);
+        Component cmp = getOsgiService(Component.class);
         assertNotNull(cmp);
     }
 
-    /*
     public void testServiceAssembly() throws Exception {
         System.out.println("Waiting for NMR");
         NMR nmr = getOsgiService(NMR.class);
         assertNotNull(nmr);
-        installBundle("org.apache.servicemix", "servicemix-shared-compat", "installer", "zip");
-        installBundle("org.apache.servicemix", "servicemix-jsr181", "installer", "zip");
-        installBundle("org.apache.servicemix", "servicemix-http", "installer", "zip");
-        installBundle("org.apache.servicemix.samples.wsdl-first", "wsdl-first-sa", null, "zip");
+        installJbiBundle("org.apache.servicemix", "servicemix-shared", "installer", "zip");
+        installJbiBundle("org.apache.servicemix", "servicemix-jsr181", "installer", "zip");
+        installJbiBundle("org.apache.servicemix", "servicemix-http", "installer", "zip");
+        Bundle saBundle = installJbiBundle("org.apache.servicemix.samples.wsdl-first", "wsdl-first-sa", null, "zip");
         System.out.println("Waiting for JBI Service Assembly");
-        ServiceAssembly sa = (ServiceAssembly) getOsgiService(ServiceAssembly.class);
+        ServiceAssembly sa = getOsgiService(ServiceAssembly.class);
         assertNotNull(sa);
+
+        final CountDownLatch latch = new CountDownLatch(50);
+        for (int i = 0; i < 2; i++) {
+            new Thread() {
+                public void run() {
+                    try {
+                        for (;;) {
+                            URL url = new URL("http://localhost:8192/PersonService/");
+                            URLConnection connection = url.openConnection();
+                            connection.setDoInput(true);
+                            connection.setDoOutput(true);
+                            connection.getOutputStream().write(
+                                   ("<env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
+                                    "              xmlns:tns=\"http://servicemix.apache.org/samples/wsdl-first/types\">\n" +
+                                    "  <env:Body>\n" +
+                                    "    <tns:GetPerson>\n" +
+                                    "      <tns:personId>world</tns:personId>\n" +
+                                    "    </tns:GetPerson>\n" +
+                                    "  </env:Body>\n" +
+                                    "</env:Envelope>").getBytes());
+                            byte[] buffer = new byte[8192];
+                            int len = connection.getInputStream().read(buffer);
+                            String result = new String(buffer, 0, len);
+                            System.out.println(result);
+                            latch.countDown();
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }.start();
+        }
+
+        latch.await();
+        //Thread.sleep(500);
+        saBundle.uninstall();
+        //sa.stop();
+        //sa.shutDown();
     }
-    */
 
+    protected Bundle installJbiBundle(String groupId, String artifactId, String classifier, String type) throws BundleException {
+        String version = getBundleVersion(groupId, artifactId);
+        File loc = localMavenBundle(groupId, artifactId, version, classifier, type);
+        File tmpDir = new File("target/temp/");
+        tmpDir.mkdirs();
+        File out = new JBIDeploymentListener().handle(loc, tmpDir);
+        Bundle bundle = bundleContext.installBundle(out.toURI().toString());
+        bundle.start();
+        return bundle;
+    }
 }

Modified: servicemix/smx4/nmr/trunk/jbi/itests/src/test/resources/org/apache/servicemix/MANIFEST.MF
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/itests/src/test/resources/org/apache/servicemix/MANIFEST.MF?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/itests/src/test/resources/org/apache/servicemix/MANIFEST.MF (original)
+++ servicemix/smx4/nmr/trunk/jbi/itests/src/test/resources/org/apache/servicemix/MANIFEST.MF Thu Dec 11 07:14:57 2008
@@ -28,6 +28,7 @@
  org.apache.servicemix.nmr.api,
  org.apache.servicemix.nmr.core,
  org.apache.servicemix.jbi.deployer,
+ org.apache.servicemix.jbi.deployer.handler,
  org.apache.servicemix.kernel.testing.support,
  org.springframework.osgi.util,
  javax.jbi.component

Modified: servicemix/smx4/nmr/trunk/jbi/runtime/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/runtime/pom.xml?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/runtime/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/jbi/runtime/pom.xml Thu Dec 11 07:14:57 2008
@@ -55,7 +55,7 @@
         <dependency>
             <groupId>org.apache.servicemix</groupId>
             <artifactId>servicemix-eip</artifactId>
-		    <version>${servicemix3.component.version}</version>
+		    <version>${servicemix.eip.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
@@ -79,7 +79,7 @@
         <dependency>
             <groupId>org.apache.servicemix</groupId>
             <artifactId>servicemix-common</artifactId>
-		    <version>${servicemix3.component.version}</version>
+		    <version>${servicemix.shared.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>

Modified: servicemix/smx4/nmr/trunk/nmr/api/src/main/java/org/apache/servicemix/nmr/api/internal/InternalEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/api/src/main/java/org/apache/servicemix/nmr/api/internal/InternalEndpoint.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/api/src/main/java/org/apache/servicemix/nmr/api/internal/InternalEndpoint.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/api/src/main/java/org/apache/servicemix/nmr/api/internal/InternalEndpoint.java Thu Dec 11 07:14:57 2008
@@ -16,6 +16,8 @@
  */
 package org.apache.servicemix.nmr.api.internal;
 
+import java.util.Map;
+
 import org.apache.servicemix.nmr.api.Endpoint;
 
 /**
@@ -35,6 +37,13 @@
     String getId();
 
     /**
+     * Retrieve the metadata associated with this endpoint
+     *
+     * @return a non null map containing the metadata
+     */
+    Map<String,?> getMetaData();
+
+    /**
      * Retrieve the channel associated with this endpoint.
      * This method is usually used by {@link Flow}s to deliver
      * exchanges to this endpoint.

Modified: servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/ClientChannel.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/ClientChannel.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/ClientChannel.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/ClientChannel.java Thu Dec 11 07:14:57 2008
@@ -17,6 +17,8 @@
 package org.apache.servicemix.nmr.core;
 
 import java.util.UUID;
+import java.util.Map;
+import java.util.Collections;
 import java.util.concurrent.Executors;
 
 import org.apache.servicemix.nmr.api.Channel;
@@ -46,6 +48,10 @@
             return id;
         }
 
+        public Map<String, ?> getMetaData() {
+            return Collections.emptyMap();
+        }
+
         public Endpoint getEndpoint() {
             return this;
         }

Modified: servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/EndpointRegistryImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/EndpointRegistryImpl.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/EndpointRegistryImpl.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/EndpointRegistryImpl.java Thu Dec 11 07:14:57 2008
@@ -97,7 +97,7 @@
      * @see org.apache.servicemix.nmr.api.Endpoint
      */
     public void register(Endpoint endpoint, Map<String, ?> properties) {
-        InternalEndpointWrapper wrapper = new InternalEndpointWrapper(endpoint);
+        InternalEndpointWrapper wrapper = new InternalEndpointWrapper(endpoint, properties);
         if (endpoints.putIfAbsent(endpoint, wrapper) == null) {
             Executor executor = Executors.newCachedThreadPool();
             ChannelImpl channel = new ChannelImpl(wrapper, executor, nmr);

Modified: servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/InternalEndpointWrapper.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/InternalEndpointWrapper.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/InternalEndpointWrapper.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/core/src/main/java/org/apache/servicemix/nmr/core/InternalEndpointWrapper.java Thu Dec 11 07:14:57 2008
@@ -17,6 +17,8 @@
 package org.apache.servicemix.nmr.core;
 
 import java.util.UUID;
+import java.util.Map;
+import java.util.Collections;
 
 import org.apache.servicemix.nmr.api.Channel;
 import org.apache.servicemix.nmr.api.Endpoint;
@@ -31,10 +33,12 @@
 
     private final Endpoint endpoint;
     private final String id;
+    private final Map<String,?> metadata;
     private InternalChannel channel;
 
-    public InternalEndpointWrapper(Endpoint endpoint) {
+    public InternalEndpointWrapper(Endpoint endpoint, Map<String,?> metadata) {
         this.endpoint = endpoint;
+        this.metadata = metadata;
         this.id = UUID.randomUUID().toString();
     }
 
@@ -50,6 +54,10 @@
         return id;
     }
 
+    public Map<String, ?> getMetaData() {
+        return Collections.unmodifiableMap(metadata);
+    }
+
     /**
      * Set the channel so that the endpoint can send exchanges back
      * when they are processed or act as a consumer itself.

Modified: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java Thu Dec 11 07:14:57 2008
@@ -21,15 +21,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.servicemix.nmr.api.Endpoint;
 import org.apache.servicemix.nmr.api.Exchange;
 import org.apache.servicemix.nmr.api.Role;
 import org.apache.servicemix.nmr.api.Status;
 import org.apache.servicemix.nmr.api.event.ExchangeListener;
 import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
 import org.apache.servicemix.nmr.api.internal.InternalExchange;
-import org.apache.servicemix.nmr.api.service.ServiceRegistry;
-import org.apache.servicemix.nmr.core.ServiceRegistryImpl;
 import org.springframework.beans.factory.InitializingBean;
 
 /**
@@ -85,14 +82,18 @@
 
     public void exchangeSent(Exchange exchange) {
         try {
-            LOG.info("Sending exchange: " + exchange);
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Sending exchange: " + exchange);
+            }
             if (exchange.getStatus() == Status.Active &&
                     exchange.getRole() == Role.Consumer &&
                     exchange.getOut(false) == null &&
                     exchange.getFault(false) == null &&
                     exchange instanceof InternalExchange) {
                 String id = ((InternalExchange) exchange).getSource().getId();
-                LOG.info("Source endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                if (LOG.isTraceEnabled()) {
+                    LOG.trace("Source endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                }
                 ManagedEndpoint me = endpoints.get(id);
                 if (me == null) {
                     LOG.warn("No managed endpoint registered with id: " + id);
@@ -107,14 +108,18 @@
 
     public void exchangeDelivered(Exchange exchange) {
         try {
-            LOG.info("Receiving exchange: " + exchange);
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Receiving exchange: " + exchange);
+            }
             if (exchange.getStatus() == Status.Active &&
                     exchange.getRole() == Role.Provider &&
                     exchange.getOut(false) == null &&
                     exchange.getFault(false) == null &&
                     exchange instanceof InternalExchange) {
                 String id = ((InternalExchange) exchange).getDestination().getId();
-                LOG.info("Dest endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                if (LOG.isTraceEnabled()) {
+                    LOG.trace("Dest endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                }
                 ManagedEndpoint me = endpoints.get(id);
                 if (me == null) {
                     LOG.warn("No managed endpoint registered with id: " + id);

Modified: servicemix/smx4/nmr/trunk/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/pom.xml?rev=725709&r1=725708&r2=725709&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/pom.xml Thu Dec 11 07:14:57 2008
@@ -76,14 +76,17 @@
       <geronimo.javamail.version>1.5</geronimo.javamail.version>
       <geronimo.jta.version>1.1.1</geronimo.jta.version>
       <geronimo.servlet.version>1.1.2</geronimo.servlet.version>
+      <geronimo.stax.version>1.0.1</geronimo.stax.version>
       <jbi.api.version>1.1.0</jbi.api.version>
       <jline.version>0.9.94</jline.version>
       <junit.version>4.4_1</junit.version>
       <log4j.version>1.2.14</log4j.version>
       <pax.logging.version>1.1.1</pax.logging.version>
-      <servicemix3.component.version>2008.01</servicemix3.component.version>
       <servicemix3.version>3.3</servicemix3.version>
-      <servicemix3.shared.compat.version>3.2.3</servicemix3.shared.compat.version>
+      <servicemix.eip.version>2008.01</servicemix.eip.version>
+      <servicemix.http.version>2008.02-SNAPSHOT</servicemix.http.version>
+      <servicemix.jsr181.version>2008.01</servicemix.jsr181.version>
+      <servicemix.shared.version>2008.01</servicemix.shared.version>
       <servicemix.kernel.version>1.1.0-SNAPSHOT</servicemix.kernel.version>
       <servicemix.legal.version>1.0</servicemix.legal.version>
       <servicemix.specs.version>1.1.0</servicemix.specs.version>