You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/19 19:02:29 UTC
[1/3] tomee git commit: supporting passivation-capable
Repository: tomee
Updated Branches:
refs/heads/develop d57528671 -> 04eefb021
supporting passivation-capable
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/9451f5e0
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/9451f5e0
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/9451f5e0
Branch: refs/heads/develop
Commit: 9451f5e0fc62e2e9394fee480865dc572e28cd84
Parents: d575286
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 19 17:11:45 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 19 17:11:45 2014 +0100
----------------------------------------------------------------------
.../src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/9451f5e0/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java b/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java
index dbb092b..607a75a 100644
--- a/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java
+++ b/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/SessionBean$JAXB.java
@@ -693,8 +693,10 @@ public class SessionBean$JAXB
// ELEMENT: securityIdentity
final SecurityIdentity securityIdentity = readSecurityIdentity(elementReader, context);
sessionBean.securityIdentity = securityIdentity;
+ } else if (("passivation-capable" == elementReader.getLocalName()) && ("http://java.sun.com/xml/ns/javaee" == elementReader.getNamespaceURI())) {
+ sessionBean.setPassivationCapable(Boolean.parseBoolean(elementReader.getElementAsString()));
} else {
- context.unexpectedElement(elementReader, new QName("http://java.sun.com/xml/ns/javaee", "description"), new QName("http://java.sun.com/xml/ns/javaee", "display-name"), new QName("http://java.sun.com/xml/ns/javaee", "icon"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-name"), new QName("http://java.sun.com/xml/ns/javaee", "mapped-name"), new QName("http://java.sun.com/xml/ns/javaee", "home"), new QName("http://java.sun.com/xml/ns/javaee", "remote"), new QName("http://java.sun.com/xml/ns/javaee", "local-home"), new QName("http://java.sun.com/xml/ns/javaee", "local"), new QName("http://java.sun.com/xml/ns/javaee", "business-local"), new QName("http://java.sun.com/xml/ns/javaee", "business-remote"), new QName("http://java.sun.com/xml/ns/javaee", "local-bean"), new QName("http://java.sun.com/xml/ns/javaee", "service-endpoint"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-class"), new QName("http://java.sun.com/xml/ns/javaee", "session-type"), new QName("ht
tp://java.sun.com/xml/ns/javaee", "stateful-timeout"), new QName("http://java.sun.com/xml/ns/javaee", "timeout-method"), new QName("http://java.sun.com/xml/ns/javaee", "timer"), new QName("http://java.sun.com/xml/ns/javaee", "init-on-startup"), new QName("http://java.sun.com/xml/ns/javaee", "concurrency-management-type"), new QName("http://java.sun.com/xml/ns/javaee", "concurrent-method"), new QName("http://java.sun.com/xml/ns/javaee", "depends-on"), new QName("http://java.sun.com/xml/ns/javaee", "init-method"), new QName("http://java.sun.com/xml/ns/javaee", "remove-method"), new QName("http://java.sun.com/xml/ns/javaee", "async-method"), new QName("http://java.sun.com/xml/ns/javaee", "transaction-type"), new QName("http://java.sun.com/xml/ns/javaee", "after-begin-method"), new QName("http://java.sun.com/xml/ns/javaee", "before-completion-method"), new QName("http://java.sun.com/xml/ns/javaee", "after-completion-method"), new QName("http://java.sun.com/xml/ns/javaee", "around-invoke
"), new QName("http://java.sun.com/xml/ns/javaee", "around-timeout"), new QName("http://java.sun.com/xml/ns/javaee", "env-entry"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-ref"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-local-ref"), new QName("http://java.sun.com/xml/ns/javaee", "service-ref"), new QName("http://java.sun.com/xml/ns/javaee", "resource-ref"), new QName("http://java.sun.com/xml/ns/javaee", "resource-env-ref"), new QName("http://java.sun.com/xml/ns/javaee", "message-destination-ref"), new QName("http://java.sun.com/xml/ns/javaee", "persistence-context-ref"), new QName("http://java.sun.com/xml/ns/javaee", "persistence-unit-ref"), new QName("http://java.sun.com/xml/ns/javaee", "post-construct"), new QName("http://java.sun.com/xml/ns/javaee", "pre-destroy"), new QName("http://java.sun.com/xml/ns/javaee", "data-source"), new QName("http://java.sun.com/xml/ns/javaee", "post-activate"), new QName("http://java.sun.com/xml/ns/javaee", "pre-passivate"), new
QName("http://java.sun.com/xml/ns/javaee", "security-role-ref"), new QName("http://java.sun.com/xml/ns/javaee", "security-identity"));
+ context.unexpectedElement(elementReader, new QName("http://java.sun.com/xml/ns/javaee", "passivation-capable"), new QName("http://java.sun.com/xml/ns/javaee", "description"), new QName("http://java.sun.com/xml/ns/javaee", "display-name"), new QName("http://java.sun.com/xml/ns/javaee", "icon"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-name"), new QName("http://java.sun.com/xml/ns/javaee", "mapped-name"), new QName("http://java.sun.com/xml/ns/javaee", "home"), new QName("http://java.sun.com/xml/ns/javaee", "remote"), new QName("http://java.sun.com/xml/ns/javaee", "local-home"), new QName("http://java.sun.com/xml/ns/javaee", "local"), new QName("http://java.sun.com/xml/ns/javaee", "business-local"), new QName("http://java.sun.com/xml/ns/javaee", "business-remote"), new QName("http://java.sun.com/xml/ns/javaee", "local-bean"), new QName("http://java.sun.com/xml/ns/javaee", "service-endpoint"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-class"), new QN
ame("http://java.sun.com/xml/ns/javaee", "session-type"), new QName("http://java.sun.com/xml/ns/javaee", "stateful-timeout"), new QName("http://java.sun.com/xml/ns/javaee", "timeout-method"), new QName("http://java.sun.com/xml/ns/javaee", "timer"), new QName("http://java.sun.com/xml/ns/javaee", "init-on-startup"), new QName("http://java.sun.com/xml/ns/javaee", "concurrency-management-type"), new QName("http://java.sun.com/xml/ns/javaee", "concurrent-method"), new QName("http://java.sun.com/xml/ns/javaee", "depends-on"), new QName("http://java.sun.com/xml/ns/javaee", "init-method"), new QName("http://java.sun.com/xml/ns/javaee", "remove-method"), new QName("http://java.sun.com/xml/ns/javaee", "async-method"), new QName("http://java.sun.com/xml/ns/javaee", "transaction-type"), new QName("http://java.sun.com/xml/ns/javaee", "after-begin-method"), new QName("http://java.sun.com/xml/ns/javaee", "before-completion-method"), new QName("http://java.sun.com/xml/ns/javaee", "after-completion-
method"), new QName("http://java.sun.com/xml/ns/javaee", "around-invoke"), new QName("http://java.sun.com/xml/ns/javaee", "around-timeout"), new QName("http://java.sun.com/xml/ns/javaee", "env-entry"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-ref"), new QName("http://java.sun.com/xml/ns/javaee", "ejb-local-ref"), new QName("http://java.sun.com/xml/ns/javaee", "service-ref"), new QName("http://java.sun.com/xml/ns/javaee", "resource-ref"), new QName("http://java.sun.com/xml/ns/javaee", "resource-env-ref"), new QName("http://java.sun.com/xml/ns/javaee", "message-destination-ref"), new QName("http://java.sun.com/xml/ns/javaee", "persistence-context-ref"), new QName("http://java.sun.com/xml/ns/javaee", "persistence-unit-ref"), new QName("http://java.sun.com/xml/ns/javaee", "post-construct"), new QName("http://java.sun.com/xml/ns/javaee", "pre-destroy"), new QName("http://java.sun.com/xml/ns/javaee", "data-source"), new QName("http://java.sun.com/xml/ns/javaee", "post-activate"
), new QName("http://java.sun.com/xml/ns/javaee", "pre-passivate"), new QName("http://java.sun.com/xml/ns/javaee", "security-role-ref"), new QName("http://java.sun.com/xml/ns/javaee", "security-identity"));
}
}
if (descriptions != null) {
[3/3] tomee git commit: EJB CDI 1.1 discovery mode
Posted by rm...@apache.org.
EJB CDI 1.1 discovery mode
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/04eefb02
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/04eefb02
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/04eefb02
Branch: refs/heads/develop
Commit: 04eefb021198de30a0a64c2193c8b1fe6a13131e
Parents: 8adfb17
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 19 19:02:09 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 19 19:02:09 2014 +0100
----------------------------------------------------------------------
.../openejb/OpenEJBArchiveProcessor.java | 34 +++++---
.../openejb/OpenEJBDeployableContainer.java | 19 +++++
.../arquillian/openejb/SWClassLoader.java | 85 +++++++++++++-------
.../ArchiveResourceIteratorFactory.java | 24 +++---
.../openejb/assembler/classic/BeansInfo.java | 3 +-
.../java/org/apache/openejb/cdi/CdiScanner.java | 35 ++++++--
.../openejb/config/AnnotationDeployer.java | 37 ++++++++-
.../apache/openejb/config/DeploymentLoader.java | 26 +++---
.../openejb/web/LightweightWebAppBuilder.java | 18 ++++-
tck/cdi-embedded/pom.xml | 3 +
tck/cdi-embedded/src/test/resources/failing.xml | 2 +-
11 files changed, 214 insertions(+), 72 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
index 9e65369..acbbf8f 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
@@ -19,10 +19,10 @@ package org.apache.openejb.arquillian.openejb;
import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.cdi.CompositeBeans;
import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.DeploymentLoader;
import org.apache.openejb.config.EjbModule;
-import org.apache.openejb.config.EmptyEjbJar;
import org.apache.openejb.config.FinderFactory;
import org.apache.openejb.config.ReadDescriptors;
import org.apache.openejb.config.WebModule;
@@ -111,6 +111,8 @@ public class OpenEJBArchiveProcessor {
final List<AssetSource> beansXmlMerged = new ArrayList<>();
CompositeArchive earArchive = null;
Map<URL, List<String>> earMap = null;
+ final List<Archive> earLibsArchives = new ArrayList<>();
+ final CompositeBeans earBeans = new CompositeBeans();
final String prefix;
final boolean isEar = EnterpriseArchive.class.isInstance(archive);
@@ -129,6 +131,7 @@ public class OpenEJBArchiveProcessor {
if (ArchiveAsset.class.isInstance(asset)) {
final Archive<?> libArchive = ArchiveAsset.class.cast(asset).getArchive();
if (!isExcluded(libArchive.getName())) {
+ earLibsArchives.add(libArchive);
final List<Class<?>> earClasses = new ArrayList<>();
final List<String> earClassNames = new ArrayList<>();
final Map<ArchivePath, Node> content = libArchive.getContent(new IncludeRegExpPaths(".*.class"));
@@ -144,7 +147,16 @@ public class OpenEJBArchiveProcessor {
}
}
try { // ends with !/META-INF/beans.xml to force it to be used as a cdi module *with bda*
- earMap.put(new URL("jar:file://!/lib/" + libArchive.getName() + (libArchive.get(META_INF + BEANS_XML) != null ? "!/META-INF/beans.xml" : "")), earClassNames);
+ final Node beansNode = libArchive.get(META_INF + BEANS_XML);
+ final URL arUrl = new URL("jar:file://!/lib/" + libArchive.getName() + (beansNode != null ? "!/META-INF/beans.xml" : ""));
+ if (beansNode != null) {
+ try {
+ DeploymentLoader.doMerge(arUrl, earBeans, ReadDescriptors.readBeans(beansNode.getAsset().openStream()));
+ } catch (final OpenEJBException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+ earMap.put(arUrl, earClassNames);
} catch (final MalformedURLException e) {
// no-op
}
@@ -160,14 +172,16 @@ public class OpenEJBArchiveProcessor {
final URL[] urls = additionalPaths.toArray(new URL[additionalPaths.size()]);
+ final URLClassLoaderFirst swParent = new URLClassLoaderFirst(urls, parent);
+ closeables.add(swParent);
+
final SWClassLoader loader;
if (!WEB_INF.equals(prefix)) {
- final URLClassLoader swParent = new URLClassLoader(urls, parent);
- closeables.add(swParent);
- loader = new SWClassLoader("", swParent, archive);
+ if (!isEar) {
+ earLibsArchives.add(archive);
+ }
+ loader = new SWClassLoader("", swParent, earLibsArchives.toArray(new Archive<?>[earLibsArchives.size()]));
} else {
- final URLClassLoaderFirst swParent = new URLClassLoaderFirst(urls, parent);
- closeables.add(swParent);
loader = new SWClassLoader(WEB_INF_CLASSES, swParent, archive);
}
closeables.add(loader);
@@ -187,9 +201,9 @@ public class OpenEJBArchiveProcessor {
appModule.setEarLibFinder(earLibFinder);
final EjbModule earCdiModule = new EjbModule(appModule.getClassLoader(), DeploymentLoader.EAR_SCOPED_CDI_BEANS + appModule.getModuleId(), new EjbJar(), new OpenejbJar());
- earCdiModule.setBeans(new Beans());
+ earCdiModule.setBeans(earBeans);
earCdiModule.setFinder(earLibFinder);
- earCdiModule.setEjbJar(new EmptyEjbJar());
+ earCdiModule.setEjbJar(new EjbJar()); // EmptyEjbJar would prevent to add scanned EJBs but this is *here* an aggregator so we need to be able to do so
appModule.getEjbModules().add(earCdiModule);
for (final Map.Entry<ArchivePath, Node> node : archive.getContent(new IncludeRegExpPaths("/.*\\.war")).entrySet()) {
@@ -211,7 +225,7 @@ public class OpenEJBArchiveProcessor {
final FinderFactory.OpenEJBAnnotationFinder finder = new FinderFactory.OpenEJBAnnotationFinder(
finderArchive(beansXml, webArchive, webLoader, webappAdditionalPaths));
- final WebModule webModule = new WebModule(new WebApp(), contextRoot(webArchive.getName()), loader, "", appModule.getModuleId());
+ final WebModule webModule = new WebModule(new WebApp(), contextRoot(webArchive.getName()), webLoader, "", appModule.getModuleId());
webModule.setUrls(Collections.<URL>emptyList());
webModule.setScannableUrls(Collections.<URL>emptyList());
webModule.setFinder(finder);
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
index 14cf79e..2c21c58 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
@@ -26,9 +26,11 @@ import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.OpenEjbConfigurationFactory;
import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.assembler.classic.WebAppInfo;
import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.DeploymentFilterable;
+import org.apache.openejb.config.WebModule;
import org.apache.openejb.core.LocalInitialContext;
import org.apache.openejb.core.LocalInitialContextFactory;
import org.apache.openejb.loader.IO;
@@ -56,6 +58,7 @@ import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.io.ByteArrayInputStream;
+import java.io.Closeable;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
@@ -238,6 +241,22 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
try {
final AppModule module = OpenEJBArchiveProcessor.createModule(archive, testClass, cls);
final AppInfo appInfo = configurationFactory.configureApplication(module);
+
+ final WebAppBuilder webAppBuilder = SystemInstance.get().getComponent(WebAppBuilder.class);
+ if (webAppBuilder != null && LightweightWebAppBuilder.class.isInstance(webAppBuilder)) {
+ // for now we keep the same classloader, open to discussion if we should recreate it, not sure it does worth it
+ final LightweightWebAppBuilder lightweightWebAppBuilder = LightweightWebAppBuilder.class.cast(webAppBuilder);
+ for (final WebModule w : module.getWebModules()) {
+ final String moduleId = w.getModuleId();
+ lightweightWebAppBuilder.setClassLoader(moduleId, w.getClassLoader());
+ cls.add(new Closeable() {
+ @Override
+ public void close() throws IOException {
+ lightweightWebAppBuilder.removeClassLoader(moduleId);
+ }
+ });
+ }
+ }
final AppContext appCtx = assembler.createApplication(appInfo, module.getClassLoader());
final ServletContext appServletContext = new MockServletContext();
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/SWClassLoader.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/SWClassLoader.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/SWClassLoader.java
index 4f35da8..43e0351 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/SWClassLoader.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/SWClassLoader.java
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.arquillian.openejb;
+import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.Enumerator;
import org.apache.openejb.util.reflection.Reflections;
import org.jboss.shrinkwrap.api.Archive;
@@ -27,6 +28,7 @@ import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
import org.jboss.shrinkwrap.api.asset.FileAsset;
import org.jboss.shrinkwrap.api.asset.UrlAsset;
+import javax.enterprise.inject.spi.Extension;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
@@ -37,11 +39,13 @@ import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
public class SWClassLoader extends ClassLoader implements Closeable {
@@ -55,23 +59,36 @@ public class SWClassLoader extends ClassLoader implements Closeable {
}
}
- private final Archive<?> archive;
+ private final Archive<?>[] archives;
private final String prefix;
private final Collection<Closeable> closeables = new ArrayList<Closeable>();
- public SWClassLoader(final String prefix, final ClassLoader parent, final Archive<?> ar) {
+ public SWClassLoader(final String prefix, final ClassLoader parent, final Archive<?>... ar) {
super(parent);
this.prefix = prefix;
- this.archive = ar;
- ArchiveStreamHandler.set(ar, prefix, closeables);
+ this.archives = ar;
+ for (final Archive<?> a : ar) {
+ ArchiveStreamHandler.set(a, prefix, closeables);
+ }
}
@Override
public Enumeration<URL> getResources(final String name) throws IOException {
- if (name != null && !name.contains("META-INF/services/javax")) { // we want to avoid duplicates but we need container stuff, see bval tcks
- final Node node = findNode(name);
- if (node != null) {
- return enumerator(new URL(null, "archive:" + archive.getName() + "/" + name, new ArchiveStreamHandler()));
+ if (name == null) {
+ return super.getResources(name);
+ }
+ final boolean cdiExtensions = name.startsWith("META-INF/services/" + Extension.class.getName());
+ if (cdiExtensions || !name.contains("META-INF/services/javax")) {
+ final List<Archive<?>> node = findNodes(name);
+ if (!node.isEmpty()) {
+ final List<URL> urls = new ArrayList<>();
+ for (final Archive<?> i : node) {
+ urls.add(new URL(null, "archive:" + i.getName() + "/" + name, new ArchiveStreamHandler()));
+ }
+ return enumerator(urls);
+ }
+ if (cdiExtensions && "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.arquillian.cdi.extension.skip-externals", "true"))) {
+ return enumerator(Collections.<URL>emptyList());
}
}
return super.getResources(name);
@@ -79,37 +96,45 @@ public class SWClassLoader extends ClassLoader implements Closeable {
@Override
protected Enumeration<URL> findResources(final String name) throws IOException {
- final Node node = findNode(name);
- if (node != null) {
- return enumerator(new URL(null, "archive:" + archive.getName() + "/" + name, new ArchiveStreamHandler()));
+ final List<Archive<?>> node = findNodes(name);
+ if (!node.isEmpty()) {
+ final List<URL> urls = new ArrayList<>();
+ for (final Archive<?> i : node) {
+ urls.add(new URL(null, "archive:" + i.getName() + "/" + name, new ArchiveStreamHandler()));
+ }
+ return enumerator(urls);
}
return super.findResources(name);
}
- private Node findNode(final String name) {
+ private LinkedList<Archive<?>> findNodes(final String name) {
ArchivePath path = ArchivePaths.create(prefix + name);
- Node node = archive.get(path);
- if (node == null) {
- path = ArchivePaths.create(name);
- node = archive.get(path);
-
-
+ final LinkedList<Archive<?>> items = new LinkedList<>();
+ for (final Archive<?> a : archives) {
+ Node node = a.get(path);
+ if (node == null) {
+ node = a.get(ArchivePaths.create(name));
+ }
+ if (node != null) {
+ items.add(a);
+ }
}
- return node;
+ return items;
}
- private static Enumeration<URL> enumerator(final URL url) {
- return new Enumerator(Arrays.asList(url));
+ private static Enumeration<URL> enumerator(final List<URL> urls) {
+ return new Enumerator(urls);
}
@Override
protected URL findResource(final String name) {
- final Node node = findNode(name);
- if (node != null) {
+ final LinkedList<Archive<?>> node = findNodes(name);
+ if (!node.isEmpty()) {
+ final Archive<?> i = node.getLast();
try {
- return new URL(null, "archive:" + archive.getName() + "/" + name, new ArchiveStreamHandler());
+ return new URL(null, "archive:" + i.getName() + "/" + name, new ArchiveStreamHandler());
} catch (final MalformedURLException e) {
- // no-op: let reuse parent method
+ throw new IllegalArgumentException(e);
}
}
return super.findResource(name);
@@ -199,7 +224,9 @@ public class SWClassLoader extends ClassLoader implements Closeable {
@Override
public void close() throws IOException {
- ArchiveStreamHandler.reset(archive.getName());
+ for (final Archive<?> a : archives) {
+ ArchiveStreamHandler.reset(a.getName());
+ }
for (final Closeable cl : closeables) {
try {
cl.close();
@@ -210,7 +237,7 @@ public class SWClassLoader extends ClassLoader implements Closeable {
}
// to let frameworks using TCCL use the archive directly
- public Archive<?> getArchive() {
- return archive;
+ public Archive<?>[] getArchives() {
+ return archives;
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/cucumber/ArchiveResourceIteratorFactory.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/cucumber/ArchiveResourceIteratorFactory.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/cucumber/ArchiveResourceIteratorFactory.java
index b3825bd..a3d1e76 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/cucumber/ArchiveResourceIteratorFactory.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/cucumber/ArchiveResourceIteratorFactory.java
@@ -47,21 +47,23 @@ public class ArchiveResourceIteratorFactory implements ResourceIteratorFactory {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final Collection<Resource> resources = new ArrayList<Resource>();
if (SWClassLoader.class.isInstance(loader)) {
- final Archive<?> archive = SWClassLoader.class.cast(loader).getArchive();
+ final Archive<?>[] archives = SWClassLoader.class.cast(loader).getArchives();
final ClassLoader parent = loader.getParent();
- final Map<ArchivePath, Node> content = archive.getContent(new Filter<ArchivePath>() {
- @Override
- public boolean include(final ArchivePath object) {
- final String currentPath = classloaderPath(object);
+ for (final Archive<?> archive : archives) {
+ final Map<ArchivePath, Node> content = archive.getContent(new Filter<ArchivePath>() {
+ @Override
+ public boolean include(final ArchivePath object) {
+ final String currentPath = classloaderPath(object);
- return !(parent != null && parent.getResource(currentPath) != null)
- && currentPath.startsWith('/' + path) && currentPath.endsWith(suffix);
+ return !(parent != null && parent.getResource(currentPath) != null)
+ && currentPath.startsWith('/' + path) && currentPath.endsWith(suffix);
- }
- });
+ }
+ });
- for (final Map.Entry<ArchivePath, Node> entry : content.entrySet()) {
- resources.add(new SWResource(entry.getKey(), entry.getValue()));
+ for (final Map.Entry<ArchivePath, Node> entry : content.entrySet()) {
+ resources.add(new SWResource(entry.getKey(), entry.getValue()));
+ }
}
}
return resources;
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
index 0a9c532..7f9c18d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
@@ -53,8 +53,9 @@ public class BeansInfo extends InfoObject {
}
public static class BDAInfo extends InfoObject {
- public final List<String> managedClasses = new ArrayList<>();
+ public final Set<String> managedClasses = new HashSet<>();
public String discoveryMode;
public URI uri;
+ public boolean noBeansXmlButExtension;
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
index a15830e..5b30f29 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
@@ -35,6 +35,7 @@ import org.apache.openejb.util.Logger;
import org.apache.openejb.util.PropertyPlaceHolderHelper;
import org.apache.openejb.util.classloader.ClassLoaderComparator;
import org.apache.openejb.util.classloader.DefaultClassLoaderComparator;
+import org.apache.openejb.util.reflection.Reflections;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.decorator.DecoratorsManager;
import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -50,8 +51,10 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static java.util.Arrays.asList;
@@ -192,23 +195,41 @@ public class CdiScanner implements ScannerService {
final BeanArchiveService beanArchiveService = webBeansContext.getBeanArchiveService();
final boolean openejb = OpenEJBBeanInfoService.class.isInstance(beanArchiveService);
+ final Map<BeansInfo.BDAInfo, BeanArchiveService.BeanArchiveInformation> infoByBda = new HashMap<>();
for (final BeansInfo.BDAInfo bda : beans.bdas) {
- handleBda(startupObject, classLoader, comparator, beans, scl, filterByClassLoader, beanArchiveService, openejb, bda);
+ infoByBda.put(bda, handleBda(startupObject, classLoader, comparator, beans, scl, filterByClassLoader, beanArchiveService, openejb, bda));
}
for (final BeansInfo.BDAInfo bda : beans.noDescriptorBdas) {
+ // infoByBda.put() not needed since we know it means annotated
handleBda(startupObject, classLoader, comparator, beans, scl, filterByClassLoader, beanArchiveService, openejb, bda);
}
- if (startupObject.getBeanContexts() != null) { // ensure ejbs are in managed beans otherwise they will not be deployed in CDI
+ if (startupObject.getBeanContexts() != null) {
for (final BeanContext bc : startupObject.getBeanContexts()) {
final String name = bc.getBeanClass().getName();
if (BeanContext.Comp.class.getName().equals(name)) {
continue;
}
- final Class<?> load = load(name, classLoader);
- if (load != null && !classes.contains(load)) {
- classes.add(load);
+ boolean cdi = false;
+ for (final BeansInfo.BDAInfo bda : beans.bdas) {
+ final BeanArchiveService.BeanArchiveInformation info = infoByBda.get(bda);
+ if (info.getBeanDiscoveryMode() == BeanArchiveService.BeanDiscoveryMode.NONE) {
+ continue;
+ }
+ if (bda.managedClasses.contains(name)) {
+ classes.add(load(name, classLoader));
+ cdi = true;
+ break;
+ }
+ }
+ if (!cdi) {
+ for (final BeansInfo.BDAInfo bda : beans.noDescriptorBdas) {
+ if (bda.managedClasses.contains(name)) {
+ classes.add(load(name, classLoader));
+ break;
+ }
+ }
}
}
}
@@ -228,7 +249,7 @@ public class CdiScanner implements ScannerService {
}
}
- private void handleBda(final StartupObject startupObject, final ClassLoader classLoader, final ClassLoaderComparator comparator,
+ private BeanArchiveService.BeanArchiveInformation handleBda(final StartupObject startupObject, final ClassLoader classLoader, final ClassLoaderComparator comparator,
final BeansInfo beans, final ClassLoader scl, final boolean filterByClassLoader,
final BeanArchiveService beanArchiveService, final boolean openejb,
final BeansInfo.BDAInfo bda) {
@@ -298,6 +319,8 @@ public class CdiScanner implements ScannerService {
}
}
}
+
+ return information;
}
// TODO: reusing our finder would be a good idea to avoid reflection we already did!
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
index b8a6983..458f513 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
@@ -186,6 +186,7 @@ import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.enterprise.context.NormalScope;
import javax.enterprise.inject.Stereotype;
+import javax.enterprise.inject.spi.Extension;
import javax.inject.Scope;
import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.ExcludeDefaultInterceptors;
@@ -1667,10 +1668,44 @@ public class AnnotationDeployer implements DynamicDeployer {
if (c.isAnnotation()) {
newMarkers.add(c);
}
- potentialClasses.add(c.getName());
+ if (value.contains(c.getName())) {
+ potentialClasses.add(c.getName());
+ }
}
}
} while (!newMarkers.isEmpty());
+
+ newMarkers.clear();
+ newMarkers.add(Stateful.class);
+ newMarkers.add(Singleton.class);
+ newMarkers.add(Stateless.class);
+ newMarkers.add(MessageDriven.class);
+
+ boolean ejb = false;
+ for (final Class<?> marker : newMarkers) {
+ final List<Class<?>> found = finder.findAnnotatedClasses(Class.class.cast(marker));
+ for (final Class<?> c : found) {
+ if (value.contains(c.getName())) {
+ potentialClasses.add(c.getName());
+ ejb = true;
+ }
+ }
+ }
+ if (ejb) {
+ final List<Class<? extends Extension>> extensions = finder.findImplementations(Extension.class);
+ boolean skip = false;
+ for (final Class<?> c : extensions) {
+ if (value.contains(c.getName())) {
+ // legacy mode, we should check META-INF/services/... but this mode + having an Extension should be enough
+ skip = true;
+ continue;
+ }
+ }
+ if (skip) {
+ continue;
+ }
+ }
+
if (potentialClasses.isEmpty()) {
continue;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
index 639bcc3..5466034 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
@@ -1125,23 +1125,27 @@ public class DeploymentLoader implements DeploymentFilterable {
return current;
}
- current.getAlternativeClasses().addAll(beans.getAlternativeClasses());
- current.getAlternativeStereotypes().addAll(beans.getAlternativeStereotypes());
- current.getDecorators().addAll(beans.getDecorators());
- current.getInterceptors().addAll(beans.getInterceptors());
- current.getScan().getExclude().addAll(beans.getScan().getExclude());
-
- // check is done here since later we lost the data of the origin
- ReadDescriptors.checkDuplicatedByBeansXml(beans, current);
-
- final String beanDiscoveryMode = beans.getBeanDiscoveryMode();
- current.getDiscoveryByUrl().put(url, beanDiscoveryMode == null ? "ALL" : beanDiscoveryMode);
+ doMerge(url, current, beans);
} catch (final OpenEJBException e) {
logger.error("Unable to read beans.xml from: " + url.toExternalForm(), e);
}
return current;
}
+ public static void doMerge(final URL url, final CompositeBeans current, final Beans beans) {
+ current.getAlternativeClasses().addAll(beans.getAlternativeClasses());
+ current.getAlternativeStereotypes().addAll(beans.getAlternativeStereotypes());
+ current.getDecorators().addAll(beans.getDecorators());
+ current.getInterceptors().addAll(beans.getInterceptors());
+ current.getScan().getExclude().addAll(beans.getScan().getExclude());
+
+ // check is done here since later we lost the data of the origin
+ ReadDescriptors.checkDuplicatedByBeansXml(beans, current);
+
+ final String beanDiscoveryMode = beans.getBeanDiscoveryMode();
+ current.getDiscoveryByUrl().put(url, beanDiscoveryMode == null ? "ALL" : beanDiscoveryMode);
+ }
+
private void addBeansXmls(final AppModule appModule) {
final List<URL> urls = appModule.getAdditionalLibraries();
final URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
index 9a8d0e9..e20943a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
@@ -96,9 +96,18 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
private final Map<WebAppInfo, DeployedWebObjects> servletDeploymentInfo = new HashMap<WebAppInfo, DeployedWebObjects>();
private final Map<WebAppInfo, List<Object>> listeners = new HashMap<WebAppInfo, List<Object>>();
private final Map<WebAppInfo, ServletContextEvent> servletContextEvents = new HashMap<WebAppInfo, ServletContextEvent>();
+ private final Map<String, ClassLoader> loaderByWebContext = new HashMap<String, ClassLoader>();
+
+ public void setClassLoader(final String id, final ClassLoader loader) {
+ loaderByWebContext.put(id, loader);
+ }
+
+ public void removeClassLoader(final String id) {
+ loaderByWebContext.remove(id);
+ }
@Override
- public void deployWebApps(final AppInfo appInfo, final ClassLoader classLoader) throws Exception {
+ public void deployWebApps(final AppInfo appInfo, final ClassLoader appClassLoader) throws Exception {
final CoreContainerSystem cs = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
final AppContext appContext = cs.getAppContext(appInfo.appId);
@@ -107,6 +116,11 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
}
for (final WebAppInfo webAppInfo : appInfo.webApps) {
+ ClassLoader classLoader = loaderByWebContext.get(webAppInfo.moduleId);
+ if (classLoader == null) {
+ classLoader = appClassLoader;
+ }
+
final Set<Injection> injections = new HashSet<Injection>(appContext.getInjections());
injections.addAll(new InjectionBuilder(classLoader).buildInjections(webAppInfo.jndiEnc));
@@ -132,7 +146,7 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
final Assembler assembler = SystemInstance.get().getComponent(Assembler.class);
final List<BeanContext> beanContexts = assembler.initEjbs(classLoader, appInfo, appContext, injections, new ArrayList<BeanContext>(), webAppInfo.moduleId);
appContext.getBeanContexts().addAll(beanContexts);
- new CdiBuilder().build(appInfo, appContext, appContext.getBeanContexts(), webContext);
+ new CdiBuilder().build(appInfo, appContext, beanContexts, webContext);
assembler.startEjbs(true, beanContexts);
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index 56acf38..d7b2a8f 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -128,7 +128,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
+ <version>2.17</version>
<configuration>
+ <reuseForks>true</reuseForks>
+ <forkCount>1</forkCount>
<argLine>-Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled</argLine>
<useFile>false</useFile>
<disableXmlReport>true</disableXmlReport>
http://git-wip-us.apache.org/repos/asf/tomee/blob/04eefb02/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 94dd15b..00b611a 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -18,7 +18,7 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
- <class name="org.jboss.cdi.tck.tests.context.passivating.enterprise.invalid.StatefulSessionBeanXmlDescriptorTest" />
+ <class name="org.jboss.cdi.tck.tests.deployment.discovery.enterprise.EnterpriseBeanDiscoveryTest" />
</classes>
</test>
</suite>
[2/3] tomee git commit: validating passivation-capable for stateful
Posted by rm...@apache.org.
validating passivation-capable for stateful
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/8adfb17b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/8adfb17b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/8adfb17b
Branch: refs/heads/develop
Commit: 8adfb17b9d6c47e113b0e0589191e9b794053e51
Parents: 9451f5e
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 19 17:19:05 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 19 17:19:05 2014 +0100
----------------------------------------------------------------------
.../java/org/apache/openejb/cdi/CdiEjbBean.java | 21 ++++++++++++++++----
tck/cdi-embedded/pom.xml | 8 +++-----
tck/cdi-embedded/src/test/resources/failing.xml | 2 +-
3 files changed, 21 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/8adfb17b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
index 001de33..346ca8f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
@@ -43,6 +43,7 @@ import javax.enterprise.inject.Typed;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.DefinitionException;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.InjectionTarget;
import javax.enterprise.inject.spi.SessionBeanType;
@@ -67,7 +68,7 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
private final BeanContext beanContext;
private final boolean isDependentAndStateful;
- private final boolean scopeNeedsPassivation;
+ private final boolean passivable;
// initialized a bit later in the lifecycle but could be final otherwise
private BeanContext.BusinessLocalBeanHome homeLocalBean;
@@ -84,8 +85,20 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
this.beanContext = beanContext;
beanContext.set(Bean.class, this);
passivatingId = beanContext.getDeploymentID() + getReturnType().getName();
- isDependentAndStateful = getScope().equals(Dependent.class) && BeanType.STATEFUL.equals(beanContext.getComponentType());
- scopeNeedsPassivation = webBeansContext.getBeanManagerImpl().isPassivatingScope(getScope()) && BeanType.STATEFUL.equals(beanContext.getComponentType());
+
+ final boolean stateful = BeanType.STATEFUL.equals(beanContext.getComponentType());
+ isDependentAndStateful = getScope().equals(Dependent.class) && stateful;
+ if (webBeansContext.getBeanManagerImpl().isPassivatingScope(getScope()) && stateful) {
+ if (!getBeanContext().isPassivable()) {
+ throw new DefinitionException(
+ getBeanContext().getBeanClass()
+ + " is a not apssivation-capable @Stateful with a scope "
+ + getScope().getSimpleName() + " which need passivation");
+ }
+ passivable = true;
+ } else {
+ passivable = false;
+ }
}
@Override
@@ -95,7 +108,7 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
@Override
public boolean isPassivationCapable() {
- return getBeanContext().isPassivable() && scopeNeedsPassivation /* for TCKs mainly */;
+ return passivable;
}
public BeanContext getBeanContext() {
http://git-wip-us.apache.org/repos/asf/tomee/blob/8adfb17b/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index 1f444bf..56acf38 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -151,14 +151,12 @@
<ejbd.disabled>true</ejbd.disabled>
<ejbds.disabled>true</ejbds.disabled>
- <!-- this is a nice perf optimization to have by default but TCKs play with it -->
<openejb.cdi.applicationScope.cached>false</openejb.cdi.applicationScope.cached>
- <!-- not supported by the spec -->
<openejb.cdi.producer.interception>false</openejb.cdi.producer.interception>
- <!-- for ear we need WebAppDeployer -->
- <org.apache.openejb.assembler.classic.WebAppBuilder>org.apache.openejb.web.LightweightWebAppBuilder</org.apache.openejb.assembler.classic.WebAppBuilder>
- <!-- archives are well formed and all classes are in app loader -->
<openejb.cdi.filter.classloader>false</openejb.cdi.filter.classloader>
+
+ <openejb.deploymentId.format>{appId}/{ejbJarId}/{ejbName}</openejb.deploymentId.format>
+ <org.apache.openejb.assembler.classic.WebAppBuilder>org.apache.openejb.web.LightweightWebAppBuilder</org.apache.openejb.assembler.classic.WebAppBuilder>
</systemPropertyVariables>
</configuration>
</plugin>
http://git-wip-us.apache.org/repos/asf/tomee/blob/8adfb17b/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 3f5a642..94dd15b 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -18,7 +18,7 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
- <class name="org.jboss.cdi.tck.interceptors.tests.bindings.aroundConstruct.ejb.SessionBeanConstructorInterceptionTest" />
+ <class name="org.jboss.cdi.tck.tests.context.passivating.enterprise.invalid.StatefulSessionBeanXmlDescriptorTest" />
</classes>
</test>
</suite>