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();