You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by am...@apache.org on 2013/06/18 15:13:45 UTC
svn commit: r1494130 - in
/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service:
ImportRegistrationImpl.java RemoteServiceAdminCore.java
RemoteServiceAdminInstance.java RemoteServiceadminFactory.java
Author: amichai
Date: Tue Jun 18 13:13:44 2013
New Revision: 1494130
URL: http://svn.apache.org/r1494130
Log:
DOSGI-188 Improve fix so imports are closed only when last service instance is released and prevent false removal events
Modified:
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/ImportRegistrationImpl.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminInstance.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceadminFactory.java
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/ImportRegistrationImpl.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/ImportRegistrationImpl.java?rev=1494130&r1=1494129&r2=1494130&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/ImportRegistrationImpl.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/ImportRegistrationImpl.java Tue Jun 18 13:13:44 2013
@@ -99,9 +99,6 @@ public class ImportRegistrationImpl impl
LOG.debug("really closing ImportRegistration now");
- if (clientServiceFactory != null) {
- clientServiceFactory.setCloseable(true);
- }
if (importedService != null) {
try {
importedService.unregister();
@@ -110,6 +107,9 @@ public class ImportRegistrationImpl impl
}
importedService = null;
}
+ if (clientServiceFactory != null) {
+ clientServiceFactory.setCloseable(true);
+ }
}
public void close() {
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java?rev=1494130&r1=1494129&r2=1494130&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminCore.java Tue Jun 18 13:13:44 2013
@@ -449,15 +449,11 @@ public class RemoteServiceAdminCore impl
Collection<ImportRegistrationImpl> imRegs = importedServices.get(iri.getImportedEndpointAlways());
if (imRegs != null && imRegs.contains(iri)) {
imRegs.remove(iri);
- } else {
- LOG.error("An importRegistration was intended to be removed from internal management "
- + "structure but couldn't be found in it!");
+ eventProducer.notifyRemoval(iri);
}
if (imRegs == null || imRegs.isEmpty()) {
importedServices.remove(iri.getImportedEndpointAlways());
}
-
- eventProducer.notifyRemoval(iri);
}
}
}
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminInstance.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminInstance.java?rev=1494130&r1=1494129&r2=1494130&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminInstance.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceAdminInstance.java Tue Jun 18 13:13:44 2013
@@ -79,9 +79,11 @@ public class RemoteServiceAdminInstance
});
}
- public void close() {
+ public void close(boolean closeAll) {
closed = true;
rsaCore.removeExportRegistrations(bctx.getBundle());
- rsaCore.removeImportRegistrations();
+ if (closeAll) {
+ rsaCore.removeImportRegistrations();
+ }
}
}
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceadminFactory.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceadminFactory.java?rev=1494130&r1=1494129&r2=1494130&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceadminFactory.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/RemoteServiceadminFactory.java Tue Jun 18 13:13:44 2013
@@ -29,20 +29,21 @@ public class RemoteServiceadminFactory i
private static final Logger LOG = LoggerFactory.getLogger(RemoteServiceadminFactory.class);
private final RemoteServiceAdminCore rsaCore;
+ private int instances;
public RemoteServiceadminFactory(RemoteServiceAdminCore rsaCore) {
this.rsaCore = rsaCore;
}
- public Object getService(Bundle b, ServiceRegistration sr) {
+ public synchronized Object getService(Bundle b, ServiceRegistration sreg) {
LOG.debug("new RemoteServiceAdmin ServiceInstance created for Bundle {}", b.getSymbolicName());
+ instances++;
return new RemoteServiceAdminInstance(b.getBundleContext(), rsaCore);
}
- public void ungetService(Bundle b, ServiceRegistration sr, Object serviceObject) {
+ public synchronized void ungetService(Bundle b, ServiceRegistration sreg, Object serviceObject) {
LOG.debug("RemoteServiceAdmin ServiceInstance removed for Bundle {}", b.getSymbolicName());
- if (serviceObject instanceof RemoteServiceAdminInstance) {
- ((RemoteServiceAdminInstance)serviceObject).close();
- }
+ instances--;
+ ((RemoteServiceAdminInstance)serviceObject).close(instances == 0);
}
}