You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by cs...@apache.org on 2013/05/15 13:42:49 UTC

svn commit: r1482773 - in /cxf/dosgi/trunk/dsw/cxf-topology-manager/src: main/java/org/apache/cxf/dosgi/topologymanager/exporter/ test/java/org/apache/cxf/dosgi/topologymanager/exporter/

Author: cschneider
Date: Wed May 15 11:42:48 2013
New Revision: 1482773

URL: http://svn.apache.org/r1482773
Log:
DOSGI-180 Changing TopologyManager to use EndpointDescription instead of ExportRegistration

Added:
    cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java   (with props)
Removed:
    cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/ExportRepository.java
Modified:
    cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifier.java
    cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/TopologyManagerExport.java
    cxf/dosgi/trunk/dsw/cxf-topology-manager/src/test/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifierTest.java

Modified: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifier.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifier.java?rev=1482773&r1=1482772&r2=1482773&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifier.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifier.java Wed May 15 11:42:48 2013
@@ -43,24 +43,24 @@ public class EndpointListenerNotifier {
     private static final Logger LOG = LoggerFactory.getLogger(EndpointListenerNotifier.class);
     private BundleContext bctx;
     private ServiceTracker stEndpointListeners;
-    private ExportRepository exportRepository;
+    private EndpointRepository exportRepository;
 
-    public EndpointListenerNotifier(BundleContext bctx, ExportRepository exportRepository) {
+    public EndpointListenerNotifier(BundleContext bctx, EndpointRepository exportRepository) {
         this.bctx = bctx;
         this.exportRepository = exportRepository;
         this.stEndpointListeners = new ServiceTracker(bctx, EndpointListener.class.getName(), null) {
             @Override
-            public Object addingService(ServiceReference reference) {
+            public Object addingService(ServiceReference epListenerRef) {
                 LOG.debug("new EndpointListener detected");
-                notifyListenerOfAllExistingExports(reference);
-                return super.addingService(reference);
+                notifyListenerOfAllExistingExports(epListenerRef);
+                return super.addingService(epListenerRef);
             }
 
             @Override
-            public void modifiedService(ServiceReference reference, Object service) {
+            public void modifiedService(ServiceReference epListenerRef, Object service) {
                 LOG.debug("EndpointListener modified");
-                notifyListenerOfAllExistingExports(reference);
-                super.modifiedService(reference, service);
+                notifyListenerOfAllExistingExports(epListenerRef);
+                super.modifiedService(epListenerRef, service);
             }
 
         };
@@ -77,27 +77,27 @@ public class EndpointListenerNotifier {
     
     private void notifyListenerOfAllExistingExports(
             ServiceReference reference) {
-        Collection<ExportRegistration> registrations = exportRepository.getAllExportRegistrations();
+        Collection<EndpointDescription> registrations = exportRepository.getAllEndpoints();
         notifyListenerOfAdding(reference, registrations);
     }
     
-    void nofifyEndpointListenersOfAdding(Collection<ExportRegistration> exportRegistrations) {
+    void nofifyEndpointListenersOfAdding(Collection<EndpointDescription> endpoints) {
         ServiceReference[] epListeners = getEndpointListeners(bctx);
-        for (ServiceReference sref : epListeners) {
-            notifyListenerOfAdding(sref, exportRegistrations);
+        for (ServiceReference eplistener : epListeners) {
+            notifyListenerOfAdding(eplistener, endpoints);
         }
     }
     
-    void notifyAllListenersOfRemoval(Collection<ExportRegistration> endpoints) {
+    void notifyAllListenersOfRemoval(Collection<EndpointDescription> endpoints) {
         ServiceReference[] refs = getEndpointListeners(bctx);
         for (ServiceReference epListenerReference : refs) {
             notifyListenersOfRemoval(epListenerReference, endpoints);
         }
     }
     
-    void notifyListenersOfRemoval(Collection<ExportRegistration> registrations) {
+    void notifyListenersOfRemoval(Collection<EndpointDescription> endpoints) {
         for (ServiceReference epListenerReference : stEndpointListeners.getServiceReferences()) {
-            notifyListenersOfRemoval(epListenerReference, registrations);
+            notifyListenersOfRemoval(epListenerReference, endpoints);
         }
     }
     
@@ -105,16 +105,15 @@ public class EndpointListenerNotifier {
      * Notifies the listener if he is interested in the provided registrations
      * 
      * @param sref The ServiceReference for an EndpointListener
-     * @param exportRegistrations the registrations, the listener should be informed about
+     * @param endpoints the registrations, the listener should be informed about
      */
     private void notifyListenerOfAdding(ServiceReference epListenerReference,
-                                        Collection<ExportRegistration> exportRegistrations) {
+                                        Collection<EndpointDescription> endpoints) {
         EndpointListener epl = (EndpointListener)bctx.getService(epListenerReference);
         List<Filter> filters = getFiltersFromEndpointListenerScope(epListenerReference, bctx);
 
         LOG.debug("notifyListenerOfAdding");
-        for (ExportRegistration exReg : exportRegistrations) {
-            EndpointDescription endpoint = getExportedEndpoint(exReg);
+        for (EndpointDescription endpoint : endpoints) {
             List<Filter> matchingFilters = getMatchingFilters(filters, endpoint);
             for (Filter filter : matchingFilters) {
                 epl.endpointAdded(endpoint, filter.toString());
@@ -124,11 +123,10 @@ public class EndpointListenerNotifier {
     }
 
     void notifyListenersOfRemoval(ServiceReference epListenerReference,
-                                          Collection<ExportRegistration> exportRegistrations) {
+                                          Collection<EndpointDescription> endpoints) {
         EndpointListener epl = (EndpointListener)bctx.getService(epListenerReference);
         List<Filter> filters = getFiltersFromEndpointListenerScope(epListenerReference, bctx);
-        for (ExportRegistration exReg : exportRegistrations) {
-            EndpointDescription endpoint = getExportedEndpoint(exReg);
+        for (EndpointDescription endpoint : endpoints) {
             List<Filter> matchingFilters = getMatchingFilters(filters, endpoint);
             for (Filter filter : matchingFilters) {
                 epl.endpointRemoved(endpoint, filter.toString());
@@ -205,16 +203,6 @@ public class EndpointListenerNotifier {
     }
    
     /**
-     * Retrieve exported Endpoint while handling null
-     * @param exReg
-     * @return exported Endpoint or null if not present
-     */
-    private EndpointDescription getExportedEndpoint(ExportRegistration exReg) {
-        ExportReference ref = (exReg == null) ? null : exReg.getExportReference();
-        return (ref == null) ? null : ref.getExportedEndpoint(); 
-    }
-   
-    /**
      * Retrieve endpoint properties as Dictionary
      * 
      * @param ep

Added: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java?rev=1482773&view=auto
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java (added)
+++ cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java Wed May 15 11:42:48 2013
@@ -0,0 +1,27 @@
+/**
+ * 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.topologymanager.exporter;
+
+import java.util.Collection;
+
+import org.osgi.service.remoteserviceadmin.EndpointDescription;
+
+public interface EndpointRepository {
+    Collection<EndpointDescription> getAllEndpoints();
+}

Propchange: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointRepository.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/TopologyManagerExport.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/TopologyManagerExport.java?rev=1482773&r1=1482772&r2=1482773&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/TopologyManagerExport.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/exporter/TopologyManagerExport.java Wed May 15 11:42:48 2013
@@ -36,6 +36,7 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.remoteserviceadmin.EndpointDescription;
 import org.osgi.service.remoteserviceadmin.ExportReference;
 import org.osgi.service.remoteserviceadmin.ExportRegistration;
 import org.osgi.service.remoteserviceadmin.RemoteConstants;
@@ -48,7 +49,7 @@ import org.slf4j.LoggerFactory;
  * <li>This class keeps a list of currently imported and exported endpoints <li>It requests the import/export
  * from RemoteAdminServices
  */
-public class TopologyManagerExport implements ExportRepository {
+public class TopologyManagerExport implements EndpointRepository {
 
     private static final Logger LOG = LoggerFactory.getLogger(TopologyManagerExport.class);
 
@@ -76,8 +77,8 @@ public class TopologyManagerExport imple
      * </pre>
      */
     private final Map<ServiceReference, 
-                      Map<RemoteServiceAdmin, Collection<ExportRegistration>>> exportedServices = 
-        new LinkedHashMap<ServiceReference, Map<RemoteServiceAdmin, Collection<ExportRegistration>>>();
+                      Map<RemoteServiceAdmin, Collection<EndpointDescription>>> exportedServices = 
+        new LinkedHashMap<ServiceReference, Map<RemoteServiceAdmin, Collection<EndpointDescription>>>();
 
     public TopologyManagerExport(BundleContext ctx, RemoteServiceAdminTracker rsaTracker) {
         execService = new ThreadPoolExecutor(5, 10, 50, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
@@ -112,6 +113,16 @@ public class TopologyManagerExport imple
     }
     
     /**
+     * Retrieve exported Endpoint while handling null
+     * @param exReg
+     * @return exported Endpoint or null if not present
+     */
+    private EndpointDescription getExportedEndpoint(ExportRegistration exReg) {
+        ExportReference ref = (exReg == null) ? null : exReg.getExportReference();
+        return (ref == null) ? null : ref.getExportedEndpoint(); 
+    }
+    
+    /**
      * checks if a Service is intended to be exported
      */
     private boolean shouldExportService(ServiceReference sref) {
@@ -127,10 +138,10 @@ public class TopologyManagerExport imple
      */
     protected void removeRemoteServiceAdmin(RemoteServiceAdmin rsa) {
         synchronized (exportedServices) {
-            for (Map<RemoteServiceAdmin, Collection<ExportRegistration>> exports : exportedServices
+            for (Map<RemoteServiceAdmin, Collection<EndpointDescription>> exports : exportedServices
                 .values()) {
                 if (exports.containsKey(rsa)) {
-                    Collection<ExportRegistration> endpoints = exports.get(rsa);
+                    Collection<EndpointDescription> endpoints = exports.get(rsa);
                     this.epListenerNotifier.notifyAllListenersOfRemoval(endpoints);
                     exports.remove(rsa);
                 }
@@ -143,7 +154,7 @@ public class TopologyManagerExport imple
 
         synchronized (exportedServices) {
             for (ServiceReference serviceRef : exportedServices.keySet()) {
-                Map<RemoteServiceAdmin, Collection<ExportRegistration>> rsaExports = exportedServices.get(serviceRef);
+                Map<RemoteServiceAdmin, Collection<EndpointDescription>> rsaExports = exportedServices.get(serviceRef);
                 String bundleName = serviceRef.getBundle().getSymbolicName();
                 if (rsaExports.containsKey(rsa)) {
                     // already handled....
@@ -179,16 +190,11 @@ public class TopologyManagerExport imple
     void removeService(ServiceReference sref) {
         synchronized (exportedServices) {
             if (exportedServices.containsKey(sref)) {
-                Map<RemoteServiceAdmin, Collection<ExportRegistration>> rsas = exportedServices.get(sref);
-                for (Map.Entry<RemoteServiceAdmin, Collection<ExportRegistration>> entry : rsas.entrySet()) {
+                Map<RemoteServiceAdmin, Collection<EndpointDescription>> rsas = exportedServices.get(sref);
+                for (Map.Entry<RemoteServiceAdmin, Collection<EndpointDescription>> entry : rsas.entrySet()) {
                     if (entry.getValue() != null) {
-                        Collection<ExportRegistration> registrations = entry.getValue();
+                        Collection<EndpointDescription> registrations = entry.getValue();
                         this.epListenerNotifier.notifyListenersOfRemoval(registrations);
-                        for (ExportRegistration exReg : registrations) {
-                            if (exReg != null) {
-                                exReg.close();
-                            }
-                        }
                     }
                 }
 
@@ -203,7 +209,7 @@ public class TopologyManagerExport imple
             LOG.info("TopologyManager: adding service to exportedServices list to export it --- from bundle:  "
                       + sref.getBundle().getSymbolicName());
             exportedServices.put(sref,
-                                 new LinkedHashMap<RemoteServiceAdmin, Collection<ExportRegistration>>());
+                                 new LinkedHashMap<RemoteServiceAdmin, Collection<EndpointDescription>>());
         }
         triggerExport(sref);
     }
@@ -219,7 +225,7 @@ public class TopologyManagerExport imple
     private void doExportService(final ServiceReference sref) {
         LOG.debug("Exporting service");
 
-        Map<RemoteServiceAdmin, Collection<ExportRegistration>> exports = null;
+        Map<RemoteServiceAdmin, Collection<EndpointDescription>> exports = null;
 
         synchronized (exportedServices) {
             exports = Collections.synchronizedMap(exportedServices.get(sref));
@@ -247,13 +253,17 @@ public class TopologyManagerExport imple
             } else {
                 // TODO: additional parameter Map ?
                 LOG.debug("exporting ...");
-                Collection<ExportRegistration> endpoints = remoteServiceAdmin
+                Collection<ExportRegistration> exportRegs = remoteServiceAdmin
                         .exportService(sref, null);
-                if (endpoints == null) {
+                if (exportRegs == null) {
                     // TODO export failed -> What should be done here?
                     LOG.error("export failed");
                     exports.put(remoteServiceAdmin, null);
                 } else {
+                	List<EndpointDescription> endpoints = new ArrayList<EndpointDescription>();
+                	for (ExportRegistration exportReg : exportRegs) {
+						endpoints.add(getExportedEndpoint(exportReg));
+					}
                     LOG.info("TopologyManager: export sucessful Endpoints: {}", endpoints);
                     // enqueue in local list of endpoints
                     exports.put(remoteServiceAdmin, endpoints);
@@ -264,11 +274,11 @@ public class TopologyManagerExport imple
         }
     }
     
-    public Collection<ExportRegistration> getAllExportRegistrations() {
-        List<ExportRegistration> registrations = new ArrayList<ExportRegistration>();
+    public Collection<EndpointDescription> getAllEndpoints() {
+        List<EndpointDescription> registrations = new ArrayList<EndpointDescription>();
         synchronized (exportedServices) {
-            for (Map<RemoteServiceAdmin, Collection<ExportRegistration>> exports : exportedServices.values()) {
-                for (Collection<ExportRegistration> regs : exports.values()) {
+            for (Map<RemoteServiceAdmin, Collection<EndpointDescription>> exports : exportedServices.values()) {
+                for (Collection<EndpointDescription> regs : exports.values()) {
                     if (regs != null) {
                         registrations.addAll(regs);
                     }
@@ -294,9 +304,9 @@ public class TopologyManagerExport imple
         if (sref != null) {
             synchronized (exportedServices) {
 
-                Map<RemoteServiceAdmin, Collection<ExportRegistration>> ex = exportedServices.get(sref);
+                Map<RemoteServiceAdmin, Collection<EndpointDescription>> ex = exportedServices.get(sref);
                 if (ex != null) {
-                    for (Map.Entry<RemoteServiceAdmin, Collection<ExportRegistration>> export : ex.entrySet()) {
+                    for (Map.Entry<RemoteServiceAdmin, Collection<EndpointDescription>> export : ex.entrySet()) {
                         export.getValue().contains(exportRegistration);
                     }
                 }

Modified: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/test/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifierTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-topology-manager/src/test/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifierTest.java?rev=1482773&r1=1482772&r2=1482773&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-topology-manager/src/test/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifierTest.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-topology-manager/src/test/java/org/apache/cxf/dosgi/topologymanager/exporter/EndpointListenerNotifierTest.java Wed May 15 11:42:48 2013
@@ -19,6 +19,8 @@
 package org.apache.cxf.dosgi.topologymanager.exporter;
 
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -36,10 +38,6 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
 import org.osgi.service.remoteserviceadmin.EndpointListener;
-import org.osgi.service.remoteserviceadmin.ExportReference;
-import org.osgi.service.remoteserviceadmin.ExportRegistration;
-
-import static org.junit.Assert.assertEquals;
 
 public class EndpointListenerNotifierTest {
 
@@ -50,14 +48,9 @@ public class EndpointListenerNotifierTes
 
         BundleContext bc = c.createMock(BundleContext.class);
         ServiceReference sref = c.createMock(ServiceReference.class);
-        ExportRegistration exReg = c.createMock(ExportRegistration.class);
-        ExportRegistration exReg2 = c.createMock(ExportRegistration.class);
         EndpointListener epl = EasyMock.createMock(EndpointListener.class);
         EndpointDescription epd = c.createMock(EndpointDescription.class);
         EndpointDescription epd2 = c.createMock(EndpointDescription.class);
-        ExportReference exRef = c.createMock(ExportReference.class);
-        ExportReference exRef2 = c.createMock(ExportReference.class);
-        
         
         Map<String, Object> props = new HashMap<String, Object>();
         String[] oc = new String[1];
@@ -80,19 +73,14 @@ public class EndpointListenerNotifierTes
             .andReturn("(objectClass=myClass)").anyTimes();
 
         
-        EasyMock.expect(exReg.getExportReference()).andReturn(exRef).anyTimes();
-        EasyMock.expect(exRef.getExportedEndpoint()).andReturn(epd).anyTimes();
         EasyMock.expect(epd.getProperties()).andReturn(props).anyTimes();
-        
-        EasyMock.expect(exReg2.getExportReference()).andReturn(exRef2).anyTimes();
-        EasyMock.expect(exRef2.getExportedEndpoint()).andReturn(epd2).anyTimes();
         EasyMock.expect(epd2.getProperties()).andReturn(props2).anyTimes();
         
         // must only be called for the first EndpointDestription ! 
         epl.endpointRemoved(EasyMock.eq(epd), EasyMock.eq("(objectClass=myClass)"));
         EasyMock.expectLastCall().once();
         
-        ExportRepository exportRepository = EasyMock.createMock(ExportRepository.class);
+        EndpointRepository exportRepository = EasyMock.createMock(EndpointRepository.class);
         
         c.replay();
         EasyMock.replay(epl);
@@ -101,11 +89,11 @@ public class EndpointListenerNotifierTes
         EndpointListenerNotifier tm = new EndpointListenerNotifier(bc, exportRepository);
 
 
-        List<ExportRegistration> exRegs = new ArrayList<ExportRegistration>();
-        exRegs.add(exReg);
-        exRegs.add(exReg2);
+        List<EndpointDescription> endpoints = new ArrayList<EndpointDescription>();
+        endpoints.add(epd);
+        endpoints.add(epd2);
 
-        tm.notifyListenersOfRemoval(sref, exRegs);
+        tm.notifyListenersOfRemoval(sref, endpoints);
 
         c.verify();
         EasyMock.verify(epl);