You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/02/04 13:52:05 UTC

tomee git commit: TOMEE-1505 cleaning cxf bus at then end of its usage

Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x 6e4fd4b98 -> e85397821


TOMEE-1505 cleaning cxf bus at then end of its usage


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e8539782
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e8539782
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e8539782

Branch: refs/heads/tomee-1.7.x
Commit: e85397821705f8ede68661ad30943743fc881566
Parents: 6e4fd4b
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Feb 4 13:51:43 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Wed Feb 4 13:51:43 2015 +0100

----------------------------------------------------------------------
 .../org/apache/openejb/server/cxf/rs/CxfRSService.java |  8 ++++++++
 .../openejb/server/cxf/transport/util/CxfUtil.java     | 13 +++++++++++++
 .../java/org/apache/openejb/server/cxf/CxfService.java |  8 ++++++++
 3 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e8539782/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
index 2af839b..7007402 100644
--- a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
+++ b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
@@ -16,12 +16,14 @@
  */
 package org.apache.openejb.server.cxf.rs;
 
+import java.util.ArrayList;
 import org.apache.cxf.Bus;
 import org.apache.cxf.binding.BindingFactoryManager;
 import org.apache.cxf.jaxrs.JAXRSBindingFactory;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated;
+import org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
 import org.apache.openejb.cdi.WebBeansContextCreated;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.observer.Observes;
@@ -144,6 +146,12 @@ public class CxfRSService extends RESTService {
     }
 
     @Override
+    public void stop() throws ServiceException {
+        super.stop();
+        CxfUtil.release();
+    }
+
+    @Override
     protected void beforeStart() {
         super.beforeStart();
         httpTransportFactory = new HttpTransportFactory(CxfUtil.getBus());

http://git-wip-us.apache.org/repos/asf/tomee/blob/e8539782/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
index 19f593a..998c9d0 100644
--- a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
+++ b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.server.cxf.transport.util;
 
+import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.binding.BindingFactory;
@@ -71,6 +72,7 @@ public final class CxfUtil {
     public static final String BUS_CONFIGURED_FLAG = "openejb.cxf.bus.configured";
     private static final Map<String, BindingFactory> bindingFactoryMap = new ConcurrentHashMap<String, BindingFactory>(8, 0.75f, 4);
     private static final AtomicReference<Bus> DEFAULT_BUS = new AtomicReference<Bus>();
+    private static final AtomicInteger USER_COUNT = new AtomicInteger();
     private static volatile boolean usingBindingFactoryMap = false;
 
     private CxfUtil() {
@@ -81,6 +83,15 @@ public final class CxfUtil {
         return usingBindingFactoryMap && bindingFactoryMap.containsKey(name);
     }
 
+    public static void release() { // symmetric of configureBus(), when last caller of configureBus() is calls this bus is destroyed
+        if (USER_COUNT.decrementAndGet() == 0) {
+            final Bus b = DEFAULT_BUS.get();
+            if (b != null) {
+                b.shutdown(true);
+            }
+        }
+    }
+
     private static Bus initDefaultBus() {
         final ClassLoader cl = Thread.currentThread().getContextClassLoader();
         Thread.currentThread().setContextClassLoader(CxfUtil.class.getClassLoader());
@@ -248,6 +259,8 @@ public final class CxfUtil {
     }
 
     public static void configureBus() {
+        USER_COUNT.incrementAndGet();
+
         final SystemInstance systemInstance = SystemInstance.get();
         if (systemInstance.getProperties().containsKey(BUS_CONFIGURED_FLAG)) { // jaxws and jaxrs for instance
             return;

http://git-wip-us.apache.org/repos/asf/tomee/blob/e8539782/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
index 9486391..b9b6b22 100644
--- a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
@@ -23,6 +23,7 @@ import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
 import org.apache.openejb.core.ivm.naming.JaxWsServiceReference;
 import org.apache.openejb.core.webservices.PortData;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.ServiceException;
 import org.apache.openejb.server.cxf.client.SaajInterceptor;
 import org.apache.openejb.server.cxf.client.WebServiceInjectionConfigurator;
 import org.apache.openejb.server.cxf.ejb.EjbWsContainer;
@@ -54,6 +55,7 @@ public class CxfService extends WsService {
         return "cxf";
     }
 
+    @Override
     public void init(final Properties props) throws java.lang.Exception {
         super.init(props);
         CxfUtil.configureBus();
@@ -66,6 +68,12 @@ public class CxfService extends WsService {
         }
     }
 
+    @Override
+    public void stop() throws ServiceException {
+        super.stop();
+        CxfUtil.release();
+    }
+
     private void initBusTransport(final Bus bus) {
         httpTransportFactory = new HttpTransportFactory(bus);
         final List<String> ids = new ArrayList<String>(httpTransportFactory.getTransportIds().size() + 1);