Repository: tomee
Updated Branches:
  refs/heads/master 3069db0ba -> dd28c89b2


TOMEE-1663 properly destroying resources: lazy one are unwrapped if created and 
resource adapters are really destroyed last (needed unwrapping)


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

Branch: refs/heads/master
Commit: dd28c89b2005b952a97a650c041db6018fd4545f
Parents: 3069db0
Author: Romain Manni-Bucau <[email protected]>
Authored: Wed Nov 18 12:20:42 2015 -0800
Committer: Romain Manni-Bucau <[email protected]>
Committed: Wed Nov 18 12:20:42 2015 -0800

----------------------------------------------------------------------
 .../openejb/assembler/classic/Assembler.java    | 22 +++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/dd28c89b/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 39b3896..69149ef 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
@@ -1833,10 +1833,19 @@ public class Assembler extends AssemblerTool implements 
org.apache.openejb.spi.A
         Collections.sort(resources, new Comparator<DestroyingResource>() { // 
end by destroying RA after having closed CF pool (for jms for instanceà
             @Override
             public int compare(final DestroyingResource o1, final 
DestroyingResource o2) {
-                if (ResourceAdapter.class.isInstance(o2.instance) && 
!ResourceAdapter.class.isInstance(o1.instance)) {
+                boolean ra1 = isRa(o1.instance);
+                boolean ra2 = isRa(o1.instance);
+                if (ra2 && !ra1) {
                     return -1;
                 }
-                return 1;
+                if (ra1 && !ra2) {
+                    return 1;
+                }
+                return o1.name.compareTo(o2.name);
+            }
+
+            private boolean isRa(final Object instance) {
+                return ResourceAdapter.class.isInstance(instance) || 
ResourceAdapterReference.class.isInstance(instance);
             }
         });
 
@@ -1851,7 +1860,14 @@ public class Assembler extends AssemblerTool implements 
org.apache.openejb.spi.A
         return resources;
     }
 
-    private void destroyResource(final String name, final String className, 
final Object object) {
+    private void destroyResource(final String name, final String className, 
final Object inObject) {
+        Object object;
+        try {
+            object = LazyResource.class.isInstance(inObject) && 
LazyResource.class.cast(inObject).isInitialized() ?
+                LazyResource.class.cast(inObject).getObject() : inObject;
+        } catch (final NamingException e) {
+            object = inObject; // in case it impl DestroyableResource
+        }
 
         Collection<Method> preDestroy = null;
 

Reply via email to