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/02 22:15:51 UTC
svn commit: r1488780 - in /cxf/dosgi/trunk:
discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/
discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/
...
Author: amichai
Date: Sun Jun 2 20:15:50 2013
New Revision: 1488780
URL: http://svn.apache.org/r1488780
Log:
DOSGI-171 Fix several missing ungetService calls (resource leaks)
Modified:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorManager.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishingEndpointListenerFactory.java
cxf/dosgi/trunk/discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/Activator.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/SecurityDelegatingHttpContext.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/qos/IntentTracker.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventAdminHelper.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventProducer.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/util/OsgiUtils.java
cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/rsatracker/RemoteServiceAdminTracker.java
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorManager.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorManager.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorManager.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorManager.java Sun Jun 2 20:15:50 2013
@@ -140,21 +140,27 @@ public class InterfaceMonitorManager {
List<ServiceReference> relatedServiceListeners) {
for (ServiceReference sref : relatedServiceListeners) {
Object service = bctx.getService(sref);
- if (!(service instanceof EndpointListener)) {
- continue;
- }
- EndpointListener epl = (EndpointListener) service;
- LOG.debug("matching {} against {}", epd, currentScope);
- if (matches(currentScope, epd)) {
- LOG.debug("Matched {} against {}", epd, currentScope);
- if (isAdded) {
- LOG.info("calling EndpointListener.endpointAdded: " + epl + " from bundle "
- + sref.getBundle().getSymbolicName() + " for endpoint: " + epd);
- epl.endpointAdded(epd, currentScope);
- } else {
- LOG.info("calling EndpointListener.endpointRemoved: " + epl + " from bundle "
- + sref.getBundle().getSymbolicName() + " for endpoint: " + epd);
- epl.endpointRemoved(epd, currentScope);
+ try {
+ if (!(service instanceof EndpointListener)) { // including null
+ continue;
+ }
+ EndpointListener epl = (EndpointListener) service;
+ LOG.debug("matching {} against {}", epd, currentScope);
+ if (matches(currentScope, epd)) {
+ LOG.debug("Matched {} against {}", epd, currentScope);
+ if (isAdded) {
+ LOG.info("calling EndpointListener.endpointAdded: " + epl + " from bundle "
+ + sref.getBundle().getSymbolicName() + " for endpoint: " + epd);
+ epl.endpointAdded(epd, currentScope);
+ } else {
+ LOG.info("calling EndpointListener.endpointRemoved: " + epl + " from bundle "
+ + sref.getBundle().getSymbolicName() + " for endpoint: " + epd);
+ epl.endpointRemoved(epd, currentScope);
+ }
+ }
+ } finally {
+ if (service != null) {
+ bctx.ungetService(sref);
}
}
}
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishingEndpointListenerFactory.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishingEndpointListenerFactory.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishingEndpointListenerFactory.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishingEndpointListenerFactory.java Sun Jun 2 20:15:50 2013
@@ -81,6 +81,7 @@ public class PublishingEndpointListenerF
public synchronized void stop() {
if (serviceRegistration != null) {
serviceRegistration.unregister();
+ serviceRegistration = null;
}
synchronized (listeners) {
Modified: cxf/dosgi/trunk/discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/Activator.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/Activator.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/Activator.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/zookeeper-server-config/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/server/config/Activator.java Sun Jun 2 20:15:50 2013
@@ -78,12 +78,19 @@ public class Activator implements Bundle
throw new RuntimeException("This bundle must be started after the bundle with the Zookeeper "
+ "Discovery Managed Service was started.");
}
- Object svc = context.getService(refs[0]);
- ManagedService ms = (ManagedService) svc;
+
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put("zookeeper.host", "127.0.0.1");
props.put("zookeeper.port", System.getProperty(ZOOKEEPER_PORT));
- ms.updated(props);
+
+ ManagedService ms = (ManagedService) context.getService(refs[0]);
+ try {
+ ms.updated(props);
+ } finally {
+ if (ms != null) {
+ context.ungetService(refs[0]);
+ }
+ }
LOG.debug("Passed the zookeeper.host property to the Zookeeper Client managed service.");
}
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/SecurityDelegatingHttpContext.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/SecurityDelegatingHttpContext.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/SecurityDelegatingHttpContext.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/SecurityDelegatingHttpContext.java Sun Jun 2 20:15:50 2013
@@ -84,15 +84,23 @@ public class SecurityDelegatingHttpConte
return !requireFilter;
}
Filter[] filters = new Filter[refs.length];
- for (int i = 0; i < refs.length; i++) {
- filters[i] = (Filter)bundleContext.getService(refs[i]);
- }
try {
- new Chain(filters).doFilter(request, response);
- return !response.isCommitted();
- } catch (ServletException e) {
- LOG.warn(e.getMessage(), e);
- return false;
+ for (int i = 0; i < refs.length; i++) {
+ filters[i] = (Filter)bundleContext.getService(refs[i]);
+ }
+ try {
+ new Chain(filters).doFilter(request, response);
+ return !response.isCommitted();
+ } catch (ServletException e) {
+ LOG.warn(e.getMessage(), e);
+ return false;
+ }
+ } finally {
+ for (int i = 0; i < refs.length; i++) {
+ if (filters[i] != null) {
+ bundleContext.ungetService(refs[i]);
+ }
+ }
}
}
}
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/qos/IntentTracker.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/qos/IntentTracker.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/qos/IntentTracker.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/qos/IntentTracker.java Sun Jun 2 20:15:50 2013
@@ -44,10 +44,10 @@ public class IntentTracker extends Servi
@Override
public Object addingService(ServiceReference reference) {
String intentName = (String) reference.getProperty(Constants.INTENT_NAME_PROP);
- Object intent = context.getService(reference);
+ Object intent = super.addingService(reference);
IntentManagerImpl.LOG.info("Adding custom intent " + intentName);
intentMap.put(intentName, intent);
- return super.addingService(reference);
+ return intent;
}
@Override
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventAdminHelper.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventAdminHelper.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventAdminHelper.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventAdminHelper.java Sun Jun 2 20:15:50 2013
@@ -90,16 +90,8 @@ public class EventAdminHelper {
props.put("timestamp", System.currentTimeMillis());
props.put("event", rsae);
- Event ev = createEvent(props, topic);
-
- EventAdmin[] eas = getEventAdmins();
- if (eas != null) {
- LOG.debug("Publishing event to {} EventAdmins; Topic:[{}]", eas.length, topic);
- for (EventAdmin eventAdmin : eas) {
- eventAdmin.postEvent(ev);
- }
- }
-
+ Event event = createEvent(props, topic);
+ notifyEventAdmins(topic, event);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@@ -109,7 +101,7 @@ public class EventAdminHelper {
}
}
- private EventAdmin[] getEventAdmins() {
+ private void notifyEventAdmins(String topic, Event event) {
ServiceReference[] refs = null;
try {
refs = bctx.getAllServiceReferences(EventAdmin.class.getName(), null);
@@ -117,18 +109,19 @@ public class EventAdminHelper {
LOG.error("Failed to get EventAdmin: " + e.getMessage(), e);
}
- if (refs == null) {
- return null;
- }
-
- EventAdmin[] eas = new EventAdmin[refs.length];
- for (int x = 0; x < refs.length; ++x) {
-
- ServiceReference serviceReference = refs[x];
- eas[x] = (EventAdmin)bctx.getService(serviceReference);
+ if (refs != null) {
+ LOG.debug("Publishing event to {} EventAdmins; Topic:[{}]", refs.length, topic);
+ for (ServiceReference serviceReference : refs) {
+ EventAdmin eventAdmin = (EventAdmin) bctx.getService(serviceReference);
+ try {
+ eventAdmin.postEvent(event);
+ } finally {
+ if (eventAdmin != null) {
+ bctx.ungetService(serviceReference);
+ }
+ }
+ }
}
-
- return eas;
}
static String remoteServiceAdminEventTypeToString(int type) {
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventProducer.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventProducer.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventProducer.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/service/EventProducer.java Sun Jun 2 20:15:50 2013
@@ -65,9 +65,15 @@ public class EventProducer {
if (listenerRefs != null) {
for (ServiceReference sref : listenerRefs) {
RemoteServiceAdminListener rsal = (RemoteServiceAdminListener)bctx.getService(sref);
- LOG.debug("notify RemoteServiceAdminListener {} of bundle {}",
- rsal, sref.getBundle().getSymbolicName());
- rsal.remoteAdminEvent(rsae);
+ try {
+ LOG.debug("notify RemoteServiceAdminListener {} of bundle {}",
+ rsal, sref.getBundle().getSymbolicName());
+ rsal.remoteAdminEvent(rsae);
+ } finally {
+ if (rsal != null) {
+ bctx.ungetService(sref);
+ }
+ }
}
}
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/util/OsgiUtils.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/util/OsgiUtils.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/util/OsgiUtils.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/util/OsgiUtils.java Sun Jun 2 20:15:50 2013
@@ -123,28 +123,33 @@ public final class OsgiUtils {
ServiceReference paRef = bc.getServiceReference(PackageAdmin.class.getName());
if (paRef != null) {
PackageAdmin pa = (PackageAdmin)bc.getService(paRef);
+ try {
+ Bundle b = pa.getBundle(iClass);
+ if (b == null) {
+ LOG.info("Unable to find interface version for interface " + iClass.getName()
+ + ". Falling back to 0.0.0");
+ return "0.0.0";
+ }
+ LOG.debug("Interface source bundle: {}", b.getSymbolicName());
- Bundle b = pa.getBundle(iClass);
- if (b == null) {
- LOG.info("Unable to find interface version for interface " + iClass.getName()
- + ". Falling back to 0.0.0");
- return "0.0.0";
- }
- LOG.debug("Interface source bundle: {}", b.getSymbolicName());
-
- ExportedPackage[] ep = pa.getExportedPackages(b);
- LOG.debug("Exported Packages of the source bundle: {}", ep);
+ ExportedPackage[] ep = pa.getExportedPackages(b);
+ LOG.debug("Exported Packages of the source bundle: {}", ep);
- String pack = iClass.getPackage().getName();
- LOG.debug("Looking for Package: {}", pack);
- if (ep != null) {
- for (ExportedPackage p : ep) {
- if (p != null
- && pack.equals(p.getName())) {
- LOG.debug("found package -> Version: {}", p.getVersion());
- return p.getVersion().toString();
+ String pack = iClass.getPackage().getName();
+ LOG.debug("Looking for Package: {}", pack);
+ if (ep != null) {
+ for (ExportedPackage p : ep) {
+ if (p != null
+ && pack.equals(p.getName())) {
+ LOG.debug("found package -> Version: {}", p.getVersion());
+ return p.getVersion().toString();
+ }
}
}
+ } finally {
+ if (pa != null) {
+ bc.ungetService(paRef);
+ }
}
} else {
LOG.error("Was unable to obtain the package admin service -> can't resolve interface versions");
Modified: cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/rsatracker/RemoteServiceAdminTracker.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/rsatracker/RemoteServiceAdminTracker.java?rev=1488780&r1=1488779&r2=1488780&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/rsatracker/RemoteServiceAdminTracker.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-topology-manager/src/main/java/org/apache/cxf/dosgi/topologymanager/rsatracker/RemoteServiceAdminTracker.java Sun Jun 2 20:15:50 2013
@@ -19,6 +19,7 @@
package org.apache.cxf.dosgi.topologymanager.rsatracker;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -45,27 +46,28 @@ public class RemoteServiceAdminTracker e
@Override
public Object addingService(ServiceReference reference) {
+ RemoteServiceAdmin rsa = (RemoteServiceAdmin) super.addingService(reference);
for (RemoteServiceAdminLifeCycleListener listener : listeners) {
- listener.added((RemoteServiceAdmin) context.getService(reference));
+ listener.added(rsa);
}
- return super.addingService(reference);
+ return rsa;
}
@Override
public void removedService(ServiceReference reference, Object service) {
+ RemoteServiceAdmin rsa = (RemoteServiceAdmin) service;
for (RemoteServiceAdminLifeCycleListener listener : listeners) {
- listener.removed((RemoteServiceAdmin) context.getService(reference));
+ listener.removed(rsa);
}
super.removedService(reference, service);
}
+ @SuppressWarnings("unchecked")
public List<RemoteServiceAdmin> getList() {
- List<RemoteServiceAdmin> list = new ArrayList<RemoteServiceAdmin>();
- ServiceReference[] refs = getServiceReferences();
- if (refs != null) {
- for (ServiceReference ref : refs) {
- list.add((RemoteServiceAdmin) context.getService(ref));
- }
+ Object[] services = getServices();
+ List list = new ArrayList();
+ if (services != null) {
+ Collections.addAll(list, services);
}
return list;
}