Author: rmannibucau Date: Tue May 14 15:27:11 2013 New Revision: 1482393 URL: http://svn.apache.org/r1482393 Log: TOMEE-933 TOMEE-934 ear (re)scanning + ear cdi integration
Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/LazyObjectReference.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Tue May 14 15:27:11 2013 @@ -102,6 +102,7 @@ public class BeanContext extends Deploym private boolean isPassivatingScope = true; private ConstructorInjectionBean<Object> constructorInjectionBean = null; + private WebBeansContext webBeansContext = null; public boolean isDynamicallyImplemented() { return proxyClass != null; @@ -1414,7 +1415,7 @@ public class BeanContext extends Deploym final boolean dynamicallyImplemented = isDynamicallyImplemented(); - final WebBeansContext webBeansContext = getModuleContext().getAppContext().getWebBeansContext(); + final WebBeansContext webBeansContext = getWebBeansContext(); if (dynamicallyImplemented) { if (!InvocationHandler.class.isAssignableFrom(getProxyClass())) { @@ -1601,7 +1602,7 @@ public class BeanContext extends Deploym @SuppressWarnings("unchecked") public <T> void inject(final T instance, CreationalContext<T> ctx) { - final WebBeansContext webBeansContext = getModuleContext().getAppContext().getWebBeansContext(); + final WebBeansContext webBeansContext = getWebBeansContext(); InjectionTargetBean<T> beanDefinition = get(CdiEjbBean.class); @@ -1616,6 +1617,18 @@ public class BeanContext extends Deploym beanDefinition.getInjectionTarget().inject(instance, ctx); } + public void setWebBeansContext(final WebBeansContext webBeansContext) { + this.webBeansContext = webBeansContext; + } + + public WebBeansContext getWebBeansContext() { + final CdiEjbBean<?> bean = get(CdiEjbBean.class); + if (bean != null) { + return bean.getWebBeansContext(); + } + return moduleContext.getAppContext().getWebBeansContext(); + } + public Set<Class<?>> getAsynchronousClasses() { return asynchronousClasses; } @@ -1698,29 +1711,6 @@ public class BeanContext extends Deploym this.hidden = hidden; } - public void initIsPassivationScope() { - // CDI 6.6.4 - if (BeanType.STATELESS.equals(componentType) || BeanType.SINGLETON.equals(componentType)) { - isPassivatingScope = false; - return; - } - - final BeanManagerImpl bm = moduleContext.getAppContext().getWebBeansContext().getBeanManagerImpl(); - if (!bm.isInUse()) { - isPassivatingScope = true; - return; - } - - final CdiEjbBean<?> bean = get(CdiEjbBean.class); - if (bean == null) { - isPassivatingScope = true; - return; - } - - final Class<? extends Annotation> scope = bean.getScope(); - isPassivatingScope = !bm.isNormalScope(scope) || bm.isPassivatingScope(scope); - } - public boolean isPassivatingScope() { final CdiEjbBean<?> bean = get(CdiEjbBean.class); if (bean == null) { Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Tue May 14 15:27:11 2013 @@ -29,6 +29,7 @@ import org.apache.openejb.core.ivm.namin import org.apache.openejb.core.ivm.naming.JaxWsServiceReference; import org.apache.openejb.core.ivm.naming.JndiReference; import org.apache.openejb.core.ivm.naming.JndiUrlReference; +import org.apache.openejb.core.ivm.naming.LazyObjectReference; import org.apache.openejb.core.ivm.naming.MapObjectReference; import org.apache.openejb.core.ivm.naming.ObjectReference; import org.apache.openejb.core.ivm.naming.PersistenceContextReference; @@ -47,6 +48,7 @@ import org.apache.openejb.util.Classes; import org.apache.openejb.util.IntrospectionSupport; import org.apache.openejb.util.LogCategory; import org.apache.openejb.util.Logger; +import org.apache.webbeans.config.WebBeansContext; import org.omg.CORBA.ORB; import javax.annotation.ManagedBean; @@ -85,6 +87,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.Callable; /** * TODO: This class is essentially an over glorified sym-linker. The names we were linking to are no longer guaranteed to be what we assume them to be. We need to come up with a @@ -360,8 +363,12 @@ public class JndiEncBuilder { // TODO Bind the BeanManager } else if (BeanManager.class.equals(type)) { - String jndiName = "java:app/BeanManager"; - reference = new LinkRef(jndiName); + reference = new LazyObjectReference<BeanManager>(new Callable<BeanManager>() { + @Override + public BeanManager call() throws Exception { + return WebBeansContext.currentInstance().getBeanManagerImpl(); + } + }); } else if (UserTransaction.class.equals(type)) { reference = new IntraVmJndiReference("comp/UserTransaction"); Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Tue May 14 15:27:11 2013 @@ -1600,6 +1600,10 @@ public class DeploymentLoader implements if (dirFiles != null) { for (final File file : dirFiles) { if (file.isDirectory()) { + if (DeploymentsResolver.isExtractedDir(file)) { + continue; + } + if (recursive) { scanDir(file, files, path + file.getName() + "/"); } Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java Tue May 14 15:27:11 2013 @@ -62,6 +62,16 @@ public class DeploymentsResolver impleme } } + public static boolean isExtractedDir(final File f) { + if (new File(f.getParentFile(), f.getName() + ".war").exists()) { + return true; + } + if (new File(f.getParentFile(), f.getName() + ".ear").exists()) { + return true; + } + return false; + } + protected static boolean isValidDirectory(final File file) { if (file.isDirectory() && !file.isHidden() && !file.equals(lib)) { @@ -146,7 +156,7 @@ public class DeploymentsResolver impleme @Override public boolean accept(final File f) { if (f.isDirectory()) { - return DeploymentsResolver.isValidDirectory(f); + return DeploymentsResolver.isValidDirectory(f) && !DeploymentsResolver.isExtractedDir(f); } return true; } Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/LazyObjectReference.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/LazyObjectReference.java?rev=1482393&view=auto ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/LazyObjectReference.java (added) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/LazyObjectReference.java Tue May 14 15:27:11 2013 @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.core.ivm.naming; + +import javax.naming.NamingException; +import java.util.concurrent.Callable; + +public class LazyObjectReference<T> extends Reference { + private Callable<T> creator; + private volatile T instance; + + public LazyObjectReference(final Callable<T> creator) { + this.creator = creator; + } + + @Override + public Object getObject() throws NamingException { + if (instance == null) { + synchronized (this) { + if (instance == null) { + try { + instance = creator.call(); + } catch (final Exception e) { + throw new NamingException(e.getMessage()); + } + } + } + } + return instance; + } +} Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java Tue May 14 15:27:11 2013 @@ -16,6 +16,8 @@ */ package org.apache.openejb.util; +import org.apache.openejb.config.DeploymentLoader; +import org.apache.openejb.config.DeploymentsResolver; import org.apache.xbean.asm.AnnotationVisitor; import org.apache.xbean.asm.Attribute; import org.apache.xbean.asm.ClassReader; @@ -208,6 +210,10 @@ public class AnnotationFinder { if (files != null) { for (final File file : files) { if (file.isDirectory()) { + if (DeploymentsResolver.isExtractedDir(file)) { + continue; + } + scanDir(file, classNames, packageName + file.getName() + "."); } else if (file.getName().endsWith(".class")) { String name = file.getName(); Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java?rev=1482393&r1=1482392&r2=1482393&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java Tue May 14 15:27:11 2013 @@ -285,7 +285,7 @@ public class TomcatJndiBuilder { comp.rebind("HandleDelegate", new SystemComponentReference(HandleDelegate.class)); if (webContext != null) { - comp.rebind("BeanManager", webContext.getAppContext().getBeanManager()); + comp.rebind("BeanManager", webContext.getWebbeansContext().getBeanManagerImpl()); } else if (contextInfo != null) { comp.rebind("BeanManager", cs.getAppContext(contextInfo.appInfo.appId).getBeanManager()); }