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());
             }


Reply via email to