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 2012/06/05 02:19:18 UTC
svn commit: r1346197 - in
/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb:
OpenEJBArchiveProcessor.java OpenEJBDeployableContainer.java
OpenEJBExtension.java TestObserver.java
Author: rmannibucau
Date: Tue Jun 5 00:19:18 2012
New Revision: 1346197
URL: http://svn.apache.org/viewvc?rev=1346197&view=rev
Log:
management of libs in a webarchive as additinal classloader elements (ease test writing))
Added:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java
Modified:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java
Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java?rev=1346197&r1=1346196&r2=1346197&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java Tue Jun 5 00:19:18 2012
@@ -8,6 +8,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -16,17 +17,22 @@ import java.util.logging.Logger;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.ConfigurableClasspathArchive;
+import org.apache.openejb.config.DeploymentLoader;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.config.ReadDescriptors;
+import org.apache.openejb.config.WebModule;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.ManagedBean;
import org.apache.openejb.jee.TransactionType;
+import org.apache.openejb.jee.WebApp;
import org.apache.openejb.jee.oejb3.EjbDeployment;
import org.apache.openejb.jee.oejb3.OpenejbJar;
import org.apache.openejb.loader.IO;
import org.apache.xbean.finder.AnnotationFinder;
import org.apache.xbean.finder.archive.ClassesArchive;
-import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
+import org.apache.xbean.finder.archive.CompositeArchive;
+import org.apache.xbean.finder.archive.JarArchive;
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
import org.jboss.arquillian.core.api.InstanceProducer;
import org.jboss.arquillian.core.api.annotation.Inject;
@@ -53,6 +59,7 @@ public class OpenEJBArchiveProcessor imp
private static final String PERSISTENCE_XML = "persistence.xml";
private static final String OPENEJB_JAR_XML = "openejb-jar.xml";
private static final String ENV_ENTRIES_PROPERTIES = "env-entries.properties";
+ public static final String WEB_INF_CLASSES = "/WEB-INF/classes/";
@Inject
@SuiteScoped
@@ -63,9 +70,25 @@ public class OpenEJBArchiveProcessor imp
final Class<?> javaClass = testClass.getJavaClass();
final AppModule appModule = new AppModule(javaClass.getClassLoader(), javaClass.getName());
+ final Collection<URL> additionalPaths = new ArrayList<URL>();
+
final String prefix;
if (archive instanceof WebArchive) {
prefix = WEB_INF;
+
+ final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*"));
+ for (Map.Entry<ArchivePath, Node> node : content.entrySet()) {
+ final Asset asset = node.getValue().getAsset();
+ if (asset instanceof UrlAsset) {
+ additionalPaths.add(get(URL.class, "url", asset));
+ } else if (asset instanceof FileAsset) {
+ try {
+ additionalPaths.add(get(File.class, "file", asset).toURI().toURL());
+ } catch (MalformedURLException e) {
+ LOGGER.log(Level.SEVERE, "can't add a library to the deployment", e);
+ }
+ }
+ }
} else {
prefix = META_INF;
}
@@ -81,7 +104,7 @@ public class OpenEJBArchiveProcessor imp
appModule.getEjbModules().add(new EjbModule(ejbJar, openejbJar));
}
- final org.apache.xbean.finder.archive.Archive finderArchive = finderArchive(archive, appModule.getClassLoader());
+ final org.apache.xbean.finder.archive.Archive finderArchive = finderArchive(archive, appModule.getClassLoader(), additionalPaths);
final EjbJar ejbJar;
final Node ejbJarXml = archive.get(prefix.concat(EJB_JAR_XML));
@@ -172,7 +195,7 @@ public class OpenEJBArchiveProcessor imp
}
}
- private org.apache.xbean.finder.archive.Archive finderArchive(final Archive<?> archive, final ClassLoader cl) {
+ private org.apache.xbean.finder.archive.Archive finderArchive(final Archive<?> archive, final ClassLoader cl, final Collection<URL> additionalPaths) {
final List<Class<?>> classes = new ArrayList<Class<?>>();
final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths(".*.class"));
for (Map.Entry<ArchivePath, Node> node : content.entrySet()) {
@@ -183,11 +206,21 @@ public class OpenEJBArchiveProcessor imp
e.printStackTrace();
}
}
- return new ClassesArchive(classes);
+
+ final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<org.apache.xbean.finder.archive.Archive>();
+ for (URL url : DeploymentLoader.filterWebappUrls(additionalPaths.toArray(new URL[additionalPaths.size()]))) {
+ archives.add(new JarArchive(cl, url));
+ }
+ archives.add(new ClassesArchive(classes));
+ return new CompositeArchive(archives);
}
private static String name(final String raw) {
- final String name = raw.replace('/', '.');
+ String name = raw;
+ if (name.startsWith(WEB_INF_CLASSES)) {
+ name = name.substring(WEB_INF_CLASSES.length() - 1);
+ }
+ name = name.replace('/', '.');
return name.substring(1, name.length() - 6);
}
Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java?rev=1346197&r1=1346196&r2=1346197&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java Tue Jun 5 00:19:18 2012
@@ -14,6 +14,7 @@ import org.apache.openejb.OpenEJBRuntime
import org.apache.openejb.OpenEjbContainer;
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.DeploymentFilterable;
@@ -89,6 +90,10 @@ public class OpenEJBDeployableContainer
@Inject
@SuiteScoped
+ private InstanceProducer<ClassLoader> classLoader;
+
+ @Inject
+ @SuiteScoped
private Instance<AppModule> module;
@Inject
@@ -156,9 +161,12 @@ public class OpenEJBDeployableContainer
appInfoProducer.set(appInfo);
appContextProducer.set(appCtx);
+ classLoader.set(appCtx.getClassLoader());
} catch (Exception e) {
throw new DeploymentException("can't deploy " + archive.getName(), e);
}
+
+
return new ProtocolMetaData();
}
Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java?rev=1346197&r1=1346196&r2=1346197&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java Tue Jun 5 00:19:18 2012
@@ -38,6 +38,7 @@ public class OpenEJBExtension implements
public void register(final ExtensionBuilder extensionBuilder) {
extensionBuilder.service(DeployableContainer.class, OpenEJBDeployableContainer.class)
.service(TestEnricher.class, OpenEJBInjectionEnricher.class)
- .service(ApplicationArchiveProcessor.class, OpenEJBArchiveProcessor.class);
+ .service(ApplicationArchiveProcessor.class, OpenEJBArchiveProcessor.class)
+ .observer(TestObserver.class);
}
}
Added: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java?rev=1346197&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java Tue Jun 5 00:19:18 2012
@@ -0,0 +1,28 @@
+package org.apache.openejb.arquillian.openejb;
+
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.core.api.annotation.Observes;
+import org.jboss.arquillian.core.spi.EventContext;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.arquillian.test.spi.event.suite.Test;
+
+public class TestObserver {
+ @Inject
+ @SuiteScoped
+ private Instance<ClassLoader> classLoader;
+
+ public void observe(@Observes EventContext<Test> event) {
+ final ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ setTCCL(classLoader.get());
+ try {
+ event.proceed();
+ } finally {
+ setTCCL(cl);
+ }
+ }
+
+ private void setTCCL(final ClassLoader cl) {
+ Thread.currentThread().setContextClassLoader(cl);
+ }
+}