You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/01/31 13:35:03 UTC

aries-rsa git commit: Avoid cycles

Repository: aries-rsa
Updated Branches:
  refs/heads/master f1edbeeda -> 61e62f2ef


Avoid cycles


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/61e62f2e
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/61e62f2e
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/61e62f2e

Branch: refs/heads/master
Commit: 61e62f2ef0299e7e393be27047cc14efd8e5e23e
Parents: f1edbee
Author: Christian Schneider <cs...@adobe.com>
Authored: Wed Jan 31 14:34:56 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Wed Jan 31 14:34:56 2018 +0100

----------------------------------------------------------------------
 .../org/apache/aries/rsa/core/CloseHandler.java | 27 ++++++++++++++++++++
 .../rsa/core/DistributionProviderTracker.java   |  2 +-
 .../aries/rsa/core/ExportReferenceImpl.java     |  2 +-
 .../aries/rsa/core/ExportRegistrationImpl.java  | 18 ++++++-------
 .../aries/rsa/core/ImportRegistrationImpl.java  | 13 +++++-----
 .../aries/rsa/core/RemoteServiceAdminCore.java  | 17 +++++++++---
 .../rsa/core/ImportRegistrationImplTest.java    | 24 ++++++++---------
 .../aries/rsa/core/event/EventProducerTest.java | 10 ++++----
 8 files changed, 76 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/CloseHandler.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/CloseHandler.java b/rsa/src/main/java/org/apache/aries/rsa/core/CloseHandler.java
new file mode 100644
index 0000000..73dd990
--- /dev/null
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/CloseHandler.java
@@ -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.aries.rsa.core;
+
+import org.osgi.service.remoteserviceadmin.ExportRegistration;
+import org.osgi.service.remoteserviceadmin.ImportRegistration;
+
+public interface CloseHandler {
+    public void onClose(ExportRegistration exportReg);
+    public void onClose(ImportRegistration importReg);
+}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java b/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
index b208b40..1477e4c 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
 
 @SuppressWarnings("rawtypes")
 public class DistributionProviderTracker extends ServiceTracker<DistributionProvider, ServiceRegistration> {
-    private static final Logger LOG = LoggerFactory.getLogger(Activator.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DistributionProviderTracker.class);
 
     public DistributionProviderTracker(BundleContext context) {
         super(context, DistributionProvider.class, null);

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/ExportReferenceImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ExportReferenceImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ExportReferenceImpl.java
index 1366d56..5eddae8 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ExportReferenceImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ExportReferenceImpl.java
@@ -41,7 +41,7 @@ public class ExportReferenceImpl implements ExportReference {
         return endpoint;
     }
 
-    public ServiceReference getExportedService() {
+    public ServiceReference<?> getExportedService() {
         return serviceReference;
     }
 

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
index 23496fa..bb8ee04 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
@@ -39,7 +39,7 @@ public class ExportRegistrationImpl implements ExportRegistration {
 
     private static final Logger LOG = LoggerFactory.getLogger(ExportRegistrationImpl.class);
 
-    private final RemoteServiceAdminCore rsaCore;
+    private final CloseHandler closeHandler;
     private final ExportReferenceImpl exportReference;
     private final Closeable server;
     private final Throwable exception;
@@ -51,7 +51,7 @@ public class ExportRegistrationImpl implements ExportRegistration {
     private EventProducer sender;
 
     private ExportRegistrationImpl(ExportRegistrationImpl parent, 
-            RemoteServiceAdminCore rsaCore,
+            CloseHandler rsaCore,
             EventProducer sender,
             ExportReferenceImpl exportReference, 
             Closeable server, 
@@ -59,7 +59,7 @@ public class ExportRegistrationImpl implements ExportRegistration {
         this.sender = sender;
         this.parent = parent != null ? parent.parent : this; // a parent points to itself
         this.parent.addInstance();
-        this.rsaCore = rsaCore;
+        this.closeHandler = rsaCore;
         this.exportReference = exportReference;
         this.server = server;
         this.exception = exception;
@@ -67,18 +67,18 @@ public class ExportRegistrationImpl implements ExportRegistration {
 
     // create a clone of the provided ExportRegistrationImpl that is linked to it
     public ExportRegistrationImpl(ExportRegistrationImpl parent) {
-        this(parent, parent.rsaCore, parent.sender, new ExportReferenceImpl(parent.exportReference),
+        this(parent, parent.closeHandler, parent.sender, new ExportReferenceImpl(parent.exportReference),
             parent.server, parent.exception);
     }
 
     // create a new (parent) instance which was exported successfully with the given server
-    public ExportRegistrationImpl(ServiceReference sref, Endpoint endpoint, RemoteServiceAdminCore rsaCore, EventProducer sender) {
-        this(null, rsaCore, sender, new ExportReferenceImpl(sref, endpoint.description()), endpoint, null);
+    public ExportRegistrationImpl(ServiceReference sref, Endpoint endpoint, CloseHandler closeHandler, EventProducer sender) {
+        this(null, closeHandler, sender, new ExportReferenceImpl(sref, endpoint.description()), endpoint, null);
     }
 
     // create a new (parent) instance which failed to be exported with the given exception
-    public ExportRegistrationImpl(RemoteServiceAdminCore rsaCore, EventProducer sender, Throwable exception) {
-        this(null, rsaCore, sender, null, null, exception);
+    public ExportRegistrationImpl(Throwable exception, CloseHandler closeHandler, EventProducer sender) {
+        this(null, closeHandler, sender, null, null, exception);
     }
 
     private void ensureParent() {
@@ -118,7 +118,7 @@ public class ExportRegistrationImpl implements ExportRegistration {
             closed = true;
         }
 
-        rsaCore.removeExportRegistration(this);
+        closeHandler.onClose(this);
         if (exportReference != null) {
             exportReference.close();
         }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
index 0d703ef..f3dc2f0 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ImportRegistrationImpl.java
@@ -40,7 +40,7 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
     private volatile ServiceRegistration importedService; // used only in parent
     private EndpointDescription endpoint;
     private volatile ClientServiceFactory clientServiceFactory;
-    private RemoteServiceAdminCore rsaCore;
+    private CloseHandler closeHandler;
     private boolean closed;
     private boolean detached; // used only in parent
 
@@ -54,9 +54,9 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
         initParent();
     }
 
-    public ImportRegistrationImpl(EndpointDescription endpoint, RemoteServiceAdminCore rsac, EventProducer eventProducer) {
+    public ImportRegistrationImpl(EndpointDescription endpoint, CloseHandler closeHandler, EventProducer eventProducer) {
         this.endpoint = endpoint;
-        this.rsaCore = rsac;
+        this.closeHandler = closeHandler;
         this.eventProducer = eventProducer;
         initParent();
     }
@@ -70,7 +70,7 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
         exception = parent.getException();
         endpoint = parent.getImportedEndpointDescription();
         clientServiceFactory = parent.clientServiceFactory;
-        rsaCore = parent.rsaCore;
+        closeHandler = parent.closeHandler;
 
         parent.instanceAdded(this);
     }
@@ -135,7 +135,7 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
             }
             closed = true;
         }
-        rsaCore.removeImportRegistration(this);
+        closeHandler.onClose(this);
         parent.instanceClosed(this);
     }
 
@@ -173,7 +173,7 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
     }
 
     @Override
-    public ServiceReference getImportedService() {
+    public ServiceReference<?> getImportedService() {
         return isInvalid() || parent.importedService == null ? null : parent.importedService.getReference();
     }
 
@@ -233,6 +233,7 @@ public class ImportRegistrationImpl implements ImportRegistration, ImportReferen
         return endpoint;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean update(EndpointDescription endpoint) {
         importedService.setProperties(new Hashtable<>(endpoint.getProperties()));

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
index 2b2dedf..e2a574b 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
@@ -72,6 +72,7 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
     private DistributionProvider provider;
     private BundleContext apictx;
     private PackageUtil packageUtil;
+    private CloseHandler closeHandler;
 
     public RemoteServiceAdminCore(BundleContext context, 
             BundleContext apiContext, 
@@ -83,6 +84,15 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
         this.eventProducer = eventProducer;
         this.provider = provider;
         this.packageUtil = packageUtil;
+        this.closeHandler = new CloseHandler() {
+            public void onClose(ExportRegistration exportReg) {
+                removeExportRegistration((ExportRegistrationImpl) exportReg);
+            }
+
+            public void onClose(ImportRegistration importReg) {
+                removeImportRegistration((ImportRegistrationImpl) importReg);
+            }
+        };
         // listen for exported services being unregistered so we can close the export
         createExportedServicesListener();
     }
@@ -209,6 +219,7 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
     private ExportRegistration exportService(List<String> interfaceNames,
             ServiceReference<?> serviceReference, Map<String, Object> serviceProperties) {
         LOG.info("interfaces selected for export: " + interfaceNames);
+
         try {
             Class<?>[] interfaces = getInterfaces(interfaceNames, serviceReference.getBundle());
             Map<String, Object> eprops = createEndpointProps(serviceProperties, interfaces);
@@ -224,9 +235,9 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
             if (endpoint == null) {
                 return null;
             }
-            return new ExportRegistrationImpl(serviceReference, endpoint, this, eventProducer);
+            return new ExportRegistrationImpl(serviceReference, endpoint, closeHandler, eventProducer);
         } catch (Exception e) {
-            return new ExportRegistrationImpl(this, eventProducer, e);
+            return new ExportRegistrationImpl(e, closeHandler, eventProducer);
         }
     }
     
@@ -426,7 +437,7 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
     protected ImportRegistrationImpl exposeServiceFactory(String[] interfaceNames,
                                             EndpointDescription epd,
                                             DistributionProvider handler) {
-        ImportRegistrationImpl imReg = new ImportRegistrationImpl(epd, this, eventProducer);
+        ImportRegistrationImpl imReg = new ImportRegistrationImpl(epd, closeHandler, eventProducer);
         try {
             EndpointDescription endpoint = imReg.getImportedEndpointDescription();
             Dictionary<String, Object> serviceProps = new Hashtable<String, Object>(endpoint.getProperties());

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
index 49aae53..cfa620a 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/ImportRegistrationImplTest.java
@@ -49,11 +49,11 @@ public class ImportRegistrationImplTest {
     public void testDefaultCtor() {
         IMocksControl c = EasyMock.createNiceControl();
         EndpointDescription endpoint = c.createMock(EndpointDescription.class);
-        RemoteServiceAdminCore rsac = c.createMock(RemoteServiceAdminCore.class);
+        CloseHandler closeHandler = c.createMock(CloseHandler.class);
 
         c.replay();
 
-        ImportRegistrationImpl i = new ImportRegistrationImpl(endpoint, rsac, null);
+        ImportRegistrationImpl i = new ImportRegistrationImpl(endpoint, closeHandler, null);
 
         assertNull(i.getException());
         assertEquals(i, i.getParent());
@@ -65,7 +65,7 @@ public class ImportRegistrationImplTest {
     public void testCloneAndClose() {
         IMocksControl c = EasyMock.createControl();
         EndpointDescription endpoint = c.createMock(EndpointDescription.class);
-        RemoteServiceAdminCore rsac = c.createMock(RemoteServiceAdminCore.class);
+        CloseHandler closeHandler = c.createMock(CloseHandler.class);
 
         ServiceRegistration sr = c.createMock(ServiceRegistration.class);
         ServiceReference sref = c.createMock(ServiceReference.class);
@@ -73,7 +73,7 @@ public class ImportRegistrationImplTest {
 
         c.replay();
 
-        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac, null);
+        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, closeHandler, null);
 
         ImportRegistrationImpl i2 = new ImportRegistrationImpl(i1);
 
@@ -99,7 +99,7 @@ public class ImportRegistrationImplTest {
         c.verify();
         c.reset();
 
-        rsac.removeImportRegistration(EasyMock.eq(i3));
+        closeHandler.onClose(EasyMock.eq(i3));
         EasyMock.expectLastCall().once();
 
         c.replay();
@@ -112,7 +112,7 @@ public class ImportRegistrationImplTest {
         c.verify();
         c.reset();
 
-        rsac.removeImportRegistration(EasyMock.eq(i1));
+        closeHandler.onClose(EasyMock.eq(i1));
         EasyMock.expectLastCall().once();
 
         c.replay();
@@ -122,7 +122,7 @@ public class ImportRegistrationImplTest {
         c.verify();
         c.reset();
 
-        rsac.removeImportRegistration(EasyMock.eq(i2));
+        closeHandler.onClose(EasyMock.eq(i2));
         EasyMock.expectLastCall().once();
 
         sr.unregister();
@@ -139,11 +139,11 @@ public class ImportRegistrationImplTest {
     public void testCloseAll() {
         IMocksControl c = EasyMock.createControl();
         EndpointDescription endpoint = c.createMock(EndpointDescription.class);
-        RemoteServiceAdminCore rsac = c.createMock(RemoteServiceAdminCore.class);
+        CloseHandler closeHandler = c.createMock(CloseHandler.class);
 
         c.replay();
 
-        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, rsac, null);
+        ImportRegistrationImpl i1 = new ImportRegistrationImpl(endpoint, closeHandler, null);
 
         ImportRegistrationImpl i2 = new ImportRegistrationImpl(i1);
 
@@ -156,7 +156,7 @@ public class ImportRegistrationImplTest {
         c.verify();
         c.reset();
 
-        rsac.removeImportRegistration(EasyMock.eq(i2));
+        closeHandler.onClose(EasyMock.eq(i2));
         EasyMock.expectLastCall().once();
 
         c.replay();
@@ -166,9 +166,9 @@ public class ImportRegistrationImplTest {
         c.verify();
         c.reset();
 
-        rsac.removeImportRegistration(EasyMock.eq(i1));
+        closeHandler.onClose(EasyMock.eq(i1));
         EasyMock.expectLastCall().once();
-        rsac.removeImportRegistration(EasyMock.eq(i3));
+        closeHandler.onClose(EasyMock.eq(i3));
         EasyMock.expectLastCall().once();
 
         c.replay();

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/61e62f2e/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
index 5703580..1f8cc66 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/event/EventProducerTest.java
@@ -28,8 +28,8 @@ import java.util.Hashtable;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.aries.rsa.core.CloseHandler;
 import org.apache.aries.rsa.core.ExportRegistrationImpl;
-import org.apache.aries.rsa.core.RemoteServiceAdminCore;
 import org.apache.aries.rsa.spi.Endpoint;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
@@ -53,18 +53,18 @@ import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener;
 public class EventProducerTest {
     
     private IMocksControl c;
-    private RemoteServiceAdminCore rsaCore;
     private Capture<RemoteServiceAdminEvent> capturedEvent;
     private Bundle bundle;
     private BundleContext bc;
+    private CloseHandler closeHandler;
 
     @Before
     public void before() throws InvalidSyntaxException {
         c = EasyMock.createNiceControl();
-        rsaCore = c.createMock(RemoteServiceAdminCore.class);
         capturedEvent = EasyMock.newCapture();
         bundle = createBundle();
         bc = bundleContextWithRsal(bundle);
+        closeHandler = c.createMock(CloseHandler.class);
     }
     
     @Test
@@ -78,7 +78,7 @@ public class EventProducerTest {
         c.replay();
 
         EventProducer eventProducer = new EventProducer(bc);
-        ExportRegistrationImpl ereg = new ExportRegistrationImpl(sref, endpoint, rsaCore, eventProducer);
+        ExportRegistrationImpl ereg = new ExportRegistrationImpl(sref, endpoint, closeHandler, eventProducer);
         eventProducer.publishNotification(ereg);
 
         RemoteServiceAdminEvent rsae = capturedEvent.getValue();
@@ -98,7 +98,7 @@ public class EventProducerTest {
 
         EventProducer eventProducer = new EventProducer(bc);
         final Exception exportException = new Exception();
-        ExportRegistrationImpl ereg = new ExportRegistrationImpl(rsaCore, eventProducer, exportException);
+        ExportRegistrationImpl ereg = new ExportRegistrationImpl(exportException, closeHandler, eventProducer);
         eventProducer.publishNotification(Arrays.<ExportRegistration>asList(ereg));
 
         RemoteServiceAdminEvent rsae = capturedEvent.getValue();