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/01/26 22:47:04 UTC

[1/2] tomee git commit: destroying a resource adapter correctly

Repository: tomee
Updated Branches:
  refs/heads/develop 9fbaca6bb -> 0ee520090


destroying a resource adapter correctly


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

Branch: refs/heads/develop
Commit: 8817e9d5535166e65ac4efb07e6a9a377bfb48fe
Parents: 9fbaca6
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Jan 26 22:36:49 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Jan 26 22:36:49 2015 +0100

----------------------------------------------------------------------
 .../openejb/assembler/classic/Assembler.java    | 85 +++++++++++++++++++-
 1 file changed, 84 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/8817e9d5/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index b46ac25..40d33d8 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -150,6 +150,7 @@ import org.apache.webbeans.spi.api.ResourceReference;
 import org.apache.xbean.finder.ClassLoaders;
 import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.finder.UrlSet;
+import org.apache.xbean.naming.reference.SimpleReference;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 import org.apache.xbean.recipe.UnsetPropertiesRecipe;
@@ -192,6 +193,8 @@ import java.io.Externalizable;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InvalidObjectException;
+import java.io.ObjectStreamException;
 import java.io.Serializable;
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.Instrumentation;
@@ -217,6 +220,7 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.ReentrantLock;
@@ -1624,7 +1628,23 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
     }
 
     private void destroyResource(final String name, final String className, final Object object) {
-        if (object instanceof ResourceAdapter) {
+        if (object instanceof ResourceAdapterReference) {
+            final ResourceAdapterReference resourceAdapter = (ResourceAdapterReference) object;
+            try {
+                logger.info("Stopping ResourceAdapter: " + name);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Stopping ResourceAdapter: " + className);
+                }
+
+                if (resourceAdapter.pool != null && ExecutorService.class.isInstance(resourceAdapter.pool)) {
+                    ExecutorService.class.cast(resourceAdapter.pool).shutdownNow();
+                }
+                resourceAdapter.ra.stop();
+            } catch (final Throwable t) {
+                logger.fatal("ResourceAdapter Shutdown Failed: " + name, t);
+            }
+        } else if (object instanceof ResourceAdapter) {
             final ResourceAdapter resourceAdapter = (ResourceAdapter) object;
             try {
                 logger.info("Stopping ResourceAdapter: " + name);
@@ -2002,6 +2022,30 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
                 } catch (final NamingException e) {
                     logger.warning("can't unbind resource '{0}'", connector);
                 }
+
+                for (final ResourceInfo outbound : connector.outbound) {
+                    try {
+                        destroyLookedUpResource(globalContext, outbound.id, OPENEJB_RESOURCE_JNDI_PREFIX + outbound.id);
+                    } catch (final Exception e) {
+                        // no-op
+                    }
+                }
+                for (final ResourceInfo outbound : connector.adminObject) {
+                    try {
+                        destroyLookedUpResource(globalContext, outbound.id, OPENEJB_RESOURCE_JNDI_PREFIX + outbound.id);
+                    } catch (final Exception e) {
+                        // no-op
+                    }
+                }
+                for (final MdbContainerInfo container : connector.inbound) {
+                    try {
+                        containerSystem.removeContainer(container.id);
+                        config.containerSystem.containers.remove(container);
+                        this.containerSystem.getJNDIContext().unbind(JAVA_OPENEJB_NAMING_CONTEXT + container.service + "/" + container.id);
+                    } catch (final Exception e) {
+                        // no-op
+                    }
+                }
             }
 
             containerSystem.removeAppContext(appInfo.appId);
@@ -2459,6 +2503,8 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
             final Map<String, Object> unset = serviceRecipe.getUnsetProperties();
             unset.remove("threadPoolSize");
             logUnusedProperties(unset, serviceInfo);
+
+            service = new ResourceAdapterReference(resourceAdapter, threadPool, OPENEJB_RESOURCE_JNDI_PREFIX + serviceInfo.id);
         } else if (service instanceof ManagedConnectionFactory) {
             final ManagedConnectionFactory managedConnectionFactory = (ManagedConnectionFactory) service;
 
@@ -2992,4 +3038,41 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
             this.instance = instance;
         }
     }
+
+    public static final class ResourceAdapterReference extends SimpleReference {
+        private transient ResourceAdapter ra;
+        private transient Executor pool;
+        private final String jndi;
+
+        public ResourceAdapterReference(final ResourceAdapter ra, final Executor pool, final String jndi) {
+            this.ra = ra;
+            this.pool = pool;
+            this.jndi = jndi;
+        }
+
+        public Executor getPool() {
+            return pool;
+        }
+
+        public ResourceAdapter getRa() {
+            return ra;
+        }
+
+        public String getJndi() {
+            return jndi;
+        }
+
+        @Override
+        public Object getContent() throws NamingException {
+            return ra;
+        }
+
+        protected Object readResolve() throws ObjectStreamException {
+            try {
+                return SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext().lookup(jndi);
+            } catch (final NamingException e) {
+                throw new InvalidObjectException("name not found: " + jndi);
+            }
+        }
+    }
 }


[2/2] tomee git commit: we just handle our reference in our IvmContext

Posted by rm...@apache.org.
we just handle our reference in our IvmContext


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

Branch: refs/heads/develop
Commit: 0ee5200903bae523760bb70927e468f476f4c166
Parents: 8817e9d
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Jan 26 22:40:59 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Jan 26 22:40:59 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/openejb/assembler/classic/Assembler.java    | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/0ee52009/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 40d33d8..feac0a1 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -150,7 +150,6 @@ import org.apache.webbeans.spi.api.ResourceReference;
 import org.apache.xbean.finder.ClassLoaders;
 import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.finder.UrlSet;
-import org.apache.xbean.naming.reference.SimpleReference;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 import org.apache.xbean.recipe.UnsetPropertiesRecipe;
@@ -3039,7 +3038,7 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
         }
     }
 
-    public static final class ResourceAdapterReference extends SimpleReference {
+    public static final class ResourceAdapterReference extends Reference {
         private transient ResourceAdapter ra;
         private transient Executor pool;
         private final String jndi;
@@ -3063,7 +3062,7 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
         }
 
         @Override
-        public Object getContent() throws NamingException {
+        public Object getObject() throws NamingException {
             return ra;
         }