Revert "Check the binding for LazyResources and Destroyable resources first"
This reverts commit 96973e9ac09f96b9fea13b97380a2f82cb157f61. Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c3761843 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c3761843 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c3761843 Branch: refs/heads/master Commit: c3761843e20447fc484843d6d3765d951edda4c3 Parents: 96973e9 Author: Jonathan Gallimore <[email protected]> Authored: Fri Jul 14 16:57:23 2017 +0100 Committer: Jonathan Gallimore <[email protected]> Committed: Fri Jul 14 16:57:23 2017 +0100 ---------------------------------------------------------------------- .../openejb/assembler/classic/Assembler.java | 59 ++++++++++---------- 1 file changed, 31 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/c3761843/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 13c27e6..d0c0958 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 @@ -2469,40 +2469,43 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A } private void destroyLookedUpResource(final Context globalContext, final String id, final String name) throws NamingException { - // check to see if the resource is a LazyObjectReference that has not been initialized - // if it is, we'll remove the LazyObjectReference, rather than do a lookup causing it - // to be instantiated - final String ctx = name.substring(0, name.lastIndexOf("/")); - final String objName = name.substring(ctx.length() + 1); - - final NamingEnumeration<Binding> bindings = globalContext.listBindings(ctx); - while (bindings.hasMoreElements()) { - final Binding binding = bindings.nextElement(); - if (!binding.getName().equals(objName)) { - continue; - } - if (DestroyableResource.class.isInstance(binding.getObject())) { - final DestroyableResource destroyableResource = DestroyableResource.class.cast(binding.getObject()); - destroyableResource.destroyResource(); - globalContext.unbind(name); - return; - } + final Object object; - if (!LazyObjectReference.class.isInstance(binding.getObject())) { - continue; - } + try { + object = globalContext.lookup(name); + } catch (final NamingException e) { + // if we catch a NamingException, check to see if the resource is a LaztObjectReference that has not been initialized correctly + final String ctx = name.substring(0, name.lastIndexOf("/")); + final String objName = name.substring(ctx.length() + 1); + final NamingEnumeration<Binding> bindings = globalContext.listBindings(ctx); + while (bindings.hasMoreElements()) { + final Binding binding = bindings.nextElement(); + if (!binding.getName().equals(objName)) { + continue; + } + if (DestroyableResource.class.isInstance(binding.getObject())) { + final DestroyableResource destroyableResource = DestroyableResource.class.cast(binding.getObject()); + destroyableResource.destroyResource(); + globalContext.unbind(name); + return; + } - final LazyObjectReference<?> ref = LazyObjectReference.class.cast(binding.getObject()); - if (!ref.isInitialized()) { - globalContext.unbind(name); - removeResourceInfo(id); - return; + if (!LazyObjectReference.class.isInstance(binding.getObject())) { + continue; + } + + final LazyObjectReference<?> ref = LazyObjectReference.class.cast(binding.getObject()); + if (! ref.isInitialized()) { + globalContext.unbind(name); + removeResourceInfo(name); + return; + } } + + throw e; } - // otherwise, look the object up and remove it - final Object object = globalContext.lookup(name); final String clazz; if (object == null) { // should it be possible? clazz = "?";
