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 2012/04/18 09:25:57 UTC

svn commit: r1327400 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java

Author: rmannibucau
Date: Wed Apr 18 07:25:57 2012
New Revision: 1327400

URL: http://svn.apache.org/viewvc?rev=1327400&view=rev
Log:
OPENEJB-1823 destroy the resources consistently when it is undeployed with the application

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1327400&r1=1327399&r2=1327400&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed Apr 18 07:25:57 2012
@@ -1084,31 +1084,7 @@ public class Assembler extends Assembler
         while (namingEnumeration != null && namingEnumeration.hasMoreElements()) {
             Binding binding = namingEnumeration.nextElement();
             Object object = binding.getObject();
-            if (object instanceof ResourceAdapter) {
-                ResourceAdapter resourceAdapter = (ResourceAdapter) object;
-                try {
-                    logger.info("Stopping ResourceAdapter: " + binding.getName());
-
-                    if (logger.isDebugEnabled()) {
-                        logger.debug("Stopping ResourceAdapter: " + binding.getClassName());
-                    }
-
-                    resourceAdapter.stop();
-                } catch (Throwable t) {
-                    logger.fatal("ResourceAdapter Shutdown Failed: " + binding.getName(), t);
-                }
-            } else if (object instanceof org.apache.commons.dbcp.BasicDataSource) {
-                logger.info("Closing DataSource: " + binding.getName());
-
-                try {
-                    ((org.apache.commons.dbcp.BasicDataSource) object).close();
-                } catch (Throwable t) {
-                    //Ignore
-                }
-
-            } else if (logger.isDebugEnabled()) {
-                logger.debug("Not processing resource on destroy: " + binding.getClassName());
-            }
+            destroyResource(binding.getName(), binding.getClassName(), object);
         }
 
         SystemInstance.get().removeComponent(OpenEjbConfiguration.class);
@@ -1118,6 +1094,34 @@ public class Assembler extends Assembler
         SystemInstance.reset();
     }
 
+    private void destroyResource(final String name, final String className, final Object object) {
+        if (object instanceof ResourceAdapter) {
+            ResourceAdapter resourceAdapter = (ResourceAdapter) object;
+            try {
+                logger.info("Stopping ResourceAdapter: " + name);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Stopping ResourceAdapter: " + className);
+                }
+
+                resourceAdapter.stop();
+            } catch (Throwable t) {
+                logger.fatal("ResourceAdapter Shutdown Failed: " + name, t);
+            }
+        } else if (object instanceof org.apache.commons.dbcp.BasicDataSource) {
+            logger.info("Closing DataSource: " + name);
+
+            try {
+                ((org.apache.commons.dbcp.BasicDataSource) object).close();
+            } catch (Throwable t) {
+                //Ignore
+            }
+
+        } else if (logger.isDebugEnabled()) {
+            logger.debug("Not processing resource on destroy: " + className);
+        }
+    }
+
     public synchronized void destroyApplication(String filePath) throws UndeployException, NoSuchApplicationException {
         AppInfo appInfo = deployedApplications.remove(filePath);
         if (appInfo == null) {
@@ -1333,9 +1337,19 @@ public class Assembler extends Assembler
             }
         }
 
+        final Context ic = containerSystem.getJNDIContext();
         for (String id : appInfo.resourceIds) {
+            final String name = OPENEJB_RESOURCE_JNDI_PREFIX + id;
             try {
-                containerSystem.getJNDIContext().unbind(OPENEJB_RESOURCE_JNDI_PREFIX + id);
+                final Object object = ic.lookup(name);
+                final String clazz;
+                if (object == null) { // should it be possible?
+                    clazz = "?";
+                } else {
+                    clazz = object.getClass().getName();
+                }
+                destroyResource(id, clazz, object);
+                ic.unbind(name);
             } catch (NamingException e) {
                 logger.warning("can't unbind resource '{0}'", id);
             }