You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ms...@apache.org on 2010/03/24 09:04:21 UTC

svn commit: r926967 - in /cxf/dosgi/trunk: distribution/single-bundle/ distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/ distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/ dsw/cxf-dsw/ dsw/cxf-dsw/src/...

Author: mschaaf
Date: Wed Mar 24 08:04:21 2010
New Revision: 926967

URL: http://svn.apache.org/viewvc?rev=926967&view=rev
Log:
Switched the DSW startup to Spring as outlined in DOSGI-66.

Added:
    cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/DSWActivator.java
    cxf/dosgi/trunk/distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/DSWActivatorTest.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/dsw.xml
Modified:
    cxf/dosgi/trunk/distribution/single-bundle/pom.xml
    cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/AggregatedActivator.java
    cxf/dosgi/trunk/dsw/cxf-dsw/pom.xml
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Activator.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/ActivatorTest.java

Modified: cxf/dosgi/trunk/distribution/single-bundle/pom.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/distribution/single-bundle/pom.xml?rev=926967&r1=926966&r2=926967&view=diff
==============================================================================
--- cxf/dosgi/trunk/distribution/single-bundle/pom.xml (original)
+++ cxf/dosgi/trunk/distribution/single-bundle/pom.xml Wed Mar 24 08:04:21 2010
@@ -239,7 +239,7 @@
     </dependency>  
     <dependency>
       <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
+      <artifactId>easymockclassextension</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>        

Modified: cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/AggregatedActivator.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/AggregatedActivator.java?rev=926967&r1=926966&r2=926967&view=diff
==============================================================================
--- cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/AggregatedActivator.java (original)
+++ cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/AggregatedActivator.java Wed Mar 24 08:04:21 2010
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.cxf.dosgi.dsw.Activator;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
@@ -122,6 +123,10 @@ public class AggregatedActivator impleme
             SPIActivator sba = new SPIActivator();
             sba.start(ctx);
             activators.add(sba);
+            
+            DSWActivator dsw = new DSWActivator();
+            dsw.start(ctx);
+            activators.add(dsw);
         } finally {
             Thread.currentThread().setContextClassLoader(oldClassLoader);
         }

Added: cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/DSWActivator.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/DSWActivator.java?rev=926967&view=auto
==============================================================================
--- cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/DSWActivator.java (added)
+++ cxf/dosgi/trunk/distribution/single-bundle/src/main/java/org/apache/cxf/dosgi/singlebundle/DSWActivator.java Wed Mar 24 08:04:21 2010
@@ -0,0 +1,48 @@
+/** 
+ * 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.cxf.dosgi.singlebundle;
+
+import org.apache.cxf.dosgi.dsw.Activator;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/*
+ * Starts the DSW in the singlebundle distribution 
+ * which would normally be done by the Spring OSGi Extender
+ * */
+public class DSWActivator implements BundleActivator {
+
+    private Activator dsw;
+
+    public void start(BundleContext ctx) throws Exception {
+        dsw = createActivator();
+        dsw.setBundleContext(ctx);
+        dsw.start();
+    }
+
+    public void stop(BundleContext ctx) throws Exception {
+        dsw.stop();
+    }
+
+    // separated for test case
+    protected Activator createActivator() {
+        return new Activator();
+    }
+
+}

Added: cxf/dosgi/trunk/distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/DSWActivatorTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/DSWActivatorTest.java?rev=926967&view=auto
==============================================================================
--- cxf/dosgi/trunk/distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/DSWActivatorTest.java (added)
+++ cxf/dosgi/trunk/distribution/single-bundle/src/test/java/org/apache/cxf/dosgi/singlebundle/DSWActivatorTest.java Wed Mar 24 08:04:21 2010
@@ -0,0 +1,66 @@
+/** 
+ * 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.cxf.dosgi.singlebundle;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.dosgi.dsw.Activator;
+import org.easymock.classextension.EasyMock;
+import org.osgi.framework.BundleContext;
+
+public class DSWActivatorTest extends TestCase {
+
+    public void testStartStop() throws Exception{
+
+        BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
+        final Activator a = EasyMock.createNiceMock(Activator.class);
+        
+        a.setBundleContext(bc);
+        EasyMock.expectLastCall().atLeastOnce();
+        
+        a.start();
+        EasyMock.expectLastCall().once();
+                
+        EasyMock.replay(bc);
+        EasyMock.replay(a);
+        
+        DSWActivator da = new DSWActivator(){
+            protected org.apache.cxf.dosgi.dsw.Activator createActivator() {
+                return a;
+            };
+        };
+        
+        da.start(bc);
+        
+        EasyMock.verify(a);
+        EasyMock.reset(a);
+        
+        a.stop();
+        EasyMock.expectLastCall().once();
+
+        EasyMock.replay(a);
+        
+        da.stop(bc);
+        
+        EasyMock.verify(a);
+        EasyMock.verify(bc);
+        
+    }
+    
+}

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/pom.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/pom.xml?rev=926967&r1=926966&r2=926967&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/pom.xml (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/pom.xml Wed Mar 24 08:04:21 2010
@@ -102,7 +102,6 @@
                         <Bundle-Description>This bundle contains the implementation required by the CXF Distributed Software Bundle</Bundle-Description>
                         <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                         <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
-                        <Bundle-Activator>org.apache.cxf.dosgi.dsw.Activator</Bundle-Activator>
                         <Import-Package>${bundle.import.package}</Import-Package>
                         <Export-Package>${bundle.export.package}</Export-Package>
                         <DynamicImport-Package>*</DynamicImport-Package>

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Activator.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Activator.java?rev=926967&r1=926966&r2=926967&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Activator.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Activator.java Wed Mar 24 08:04:21 2010
@@ -37,8 +37,11 @@ import org.osgi.framework.ServiceRegistr
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedService;
 import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
+import org.springframework.osgi.context.BundleContextAware;
 
-public class Activator implements BundleActivator, ManagedService {
+
+// registered as spring bean -> start / stop called accordingly 
+public class Activator implements ManagedService,BundleContextAware {
 
     private final static Logger LOG = Logger.getLogger(Activator.class.getName());
 
@@ -50,19 +53,15 @@ public class Activator implements Bundle
 
     private ServiceRegistration decoratorReg;
 
-    public synchronized void start(BundleContext context) throws Exception {
+    public synchronized void start() {
         // Disable the fast infoset as it's not compatible (yet) with OSGi
         System.setProperty("org.apache.cxf.nofastinfoset", "true");
 
-        bc = context;
         // should we have a seperate PID for a find and publish hook ?
         // context.registerService(ManagedService.class.getName(), this, getDefaults());
 
         rsaFactory = registerRemoteServiceAdminService();
 
-        /**
-         * What is this decorator doing ?!?!?! Why as a service ?
-         */
         decoratorReg = bc.registerService(ServiceDecorator.class.getName(), new ServiceDecoratorImpl(bc),
                                           null);
 
@@ -106,8 +105,10 @@ public class Activator implements Bundle
         }
     }
 
-    public void stop(BundleContext context) {
+    public void stop() {
         LOG.fine("RemoteServiceAdmin Implementation is shutting down now");
+        
+        // This also triggers the unimport and unexport of the remote services
         rsaFactoryReg.unregister();
         decoratorReg.unregister();
 
@@ -121,16 +122,14 @@ public class Activator implements Bundle
         // unregister other registered services (ManagedService + Hooks)
     }
 
-    private Dictionary<String, String> getDefaults() {
-        Dictionary<String, String> defaults = new Hashtable<String, String>();
-        defaults.put(Constants.SERVICE_PID, CONFIG_SERVICE_PID);
-        return defaults;
-    }
-
     public synchronized void updated(Dictionary props) throws ConfigurationException {
         if (props != null && CONFIG_SERVICE_PID.equals(props.get(Constants.SERVICE_PID))) {
             // topManager.updated(props);
         }
     }
 
+    public void setBundleContext(BundleContext bundleContext) {
+        bc = bundleContext;
+    }
+
 }

Added: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/dsw.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/dsw.xml?rev=926967&view=auto
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/dsw.xml (added)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/META-INF/spring/dsw.xml Wed Mar 24 08:04:21 2010
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+  
+  <bean name="dsw" class="org.apache.cxf.dosgi.dsw.Activator"
+        init-method="start" 
+        destroy-method="stop" 
+  />
+</beans>

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/ActivatorTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/ActivatorTest.java?rev=926967&r1=926966&r2=926967&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/ActivatorTest.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/ActivatorTest.java Wed Mar 24 08:04:21 2010
@@ -72,8 +72,9 @@ public class ActivatorTest extends TestC
         control.replay();
         
         
-        Activator a = new Activator();   
-        a.start(bc);
+        Activator a = new Activator();
+        a.setBundleContext(bc);
+        a.start();
         
         control.verify();