If it can help - didnt investigate if it was 100% valid - 7.x branch probably solved it with https://issues.apache.org/jira/browse/TOMEE-1548 (isInitialized() method in lazy resource)
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber <http://www.tomitribe.com> ---------- Forwarded message ---------- From: <jgallim...@apache.org> Date: 2016-02-08 13:19 GMT+01:00 Subject: [2/2] tomee git commit: Refactor + spacing To: comm...@tomee.apache.org Refactor + spacing Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/a2bbedf1 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/a2bbedf1 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/a2bbedf1 Branch: refs/heads/tomee-1.7.x Commit: a2bbedf12d33d887116761b90df6ae7f3cf9d06e Parents: 2631d5a Author: Jonathan Gallimore <j...@jrg.me.uk> Authored: Mon Feb 8 11:04:40 2016 +0000 Committer: Jonathan Gallimore <j...@jrg.me.uk> Committed: Mon Feb 8 11:04:40 2016 +0000 ---------------------------------------------------------------------- .../openejb/assembler/classic/Assembler.java | 70 +++++++++----------- 1 file changed, 31 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/a2bbedf1/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 d00b470..91b4f7a 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 @@ -1782,6 +1782,10 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A logger.debug("Not processing resource on destroy: " + className); } + removeResourceInfo(name); + } + + public void removeResourceInfo(final String name) { try { //Ensure ResourceInfo for this resource is removed final OpenEjbConfiguration configuration = SystemInstance.get().getComponent(OpenEjbConfiguration.class); @@ -2197,45 +2201,33 @@ 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 { - - Object object = null; - - try { - object = globalContext.lookup(name); - } catch (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 (!LazyObjectReference.class.isInstance(binding.getObject())) continue; - - final LazyObjectReference<?> ref = LazyObjectReference.class.cast(binding.getObject()); - if (! ref.isInitialized()) { - globalContext.unbind(name); - - // TODO: refactor this method out - //Ensure ResourceInfo for this resource is removed - final OpenEjbConfiguration configuration = SystemInstance.get().getComponent(OpenEjbConfiguration.class); - final Iterator<ResourceInfo> iterator = configuration.facilities.resources.iterator(); - while (iterator.hasNext()) { - final ResourceInfo info = iterator.next(); - if (name.equals(OPENEJB_RESOURCE_JNDI_PREFIX + info.id)) { - iterator.remove(); - break; - } - } - - return; - } - } - - throw e; - } - - final String clazz; + + Object object = null; + + try { + object = globalContext.lookup(name); + } catch (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 (!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; + } + + final String clazz; if (object == null) { // should it be possible? clazz = "?"; } else {