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 <[email protected]> Authored: Wed Jan 31 14:34:56 2018 +0100 Committer: Christian Schneider <[email protected]> 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();
