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