Author: rmannibucau
Date: Tue Aug 14 18:49:35 2012
New Revision: 1373025
URL: http://svn.apache.org/viewvc?rev=1373025&view=rev
Log:
OPENEJB-1890 managing webapp classloader even if artifacts are not on classpath
Added:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/a-pom.xml
Modified:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/pom.xml
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
Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/pom.xml?rev=1373025&r1=1373024&r2=1373025&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/pom.xml
(original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/pom.xml Tue
Aug 14 18:49:35 2012
@@ -82,6 +82,13 @@
</dependency>
<dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <version>2.0.0-alpha-1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-common</artifactId>
<version>${tomee.version}</version>
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=1373025&r1=1373024&r2=1373025&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 Aug 14 18:49:35 2012
@@ -28,15 +28,12 @@ import org.apache.openejb.jee.Transactio
import org.apache.openejb.jee.oejb3.EjbDeployment;
import org.apache.openejb.jee.oejb3.OpenejbJar;
import org.apache.openejb.loader.IO;
+import org.apache.openejb.util.classloader.URLClassLoaderFirst;
import org.apache.xbean.finder.AnnotationFinder;
import org.apache.xbean.finder.archive.ClassesArchive;
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;
import org.jboss.arquillian.test.spi.TestClass;
-import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.Node;
@@ -53,6 +50,7 @@ import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -82,7 +80,6 @@ public class OpenEJBArchiveProcessor {
public static AppModule createModule(final Archive<?> archive, final
TestClass testClass) {
final Class<?> javaClass = testClass.getJavaClass();
- final AppModule appModule = new AppModule(javaClass.getClassLoader(),
archive.getName());
final Collection<URL> additionalPaths = new ArrayList<URL>();
@@ -107,6 +104,21 @@ public class OpenEJBArchiveProcessor {
prefix = META_INF;
}
+ final ClassLoader parent = javaClass.getClassLoader();
+ final URL[] urls = additionalPaths.toArray(new
URL[additionalPaths.size()]);
+
+ final ClassLoader loader;
+ if (!WEB_INF.equals(prefix)) {
+ loader = new URLClassLoader(urls, parent);
+ } else {
+ loader = new URLClassLoaderFirst(urls, parent);
+ }
+
+ final AppModule appModule = new AppModule(loader, archive.getName());
+ if (WEB_INF.equals(prefix)) {
+ appModule.setDelegateFirst(false);
+ }
+
// add the test as a managed bean to be able to inject into it easily
{
final EjbJar ejbJar = new EjbJar();
@@ -205,6 +217,8 @@ public class OpenEJBArchiveProcessor {
}
}
+ appModule.getAdditionalLibraries().addAll(additionalPaths);
+
return appModule;
}
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=1373025&r1=1373024&r2=1373025&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 Aug 14 18:49:35 2012
@@ -192,6 +192,10 @@ public class OpenEJBDeployableContainer
@Override
public void undeploy(final Archive<?> archive) throws DeploymentException {
+ // reset classloader for next text
+ // otherwise if it was closed something can fail
+ classLoader.set(OpenEJBDeployableContainer.class.getClassLoader());
+
if (appContext.get() == null) {
return;
}
Added:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java?rev=1373025&view=auto
==============================================================================
---
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
(added)
+++
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
Tue Aug 14 18:49:35 2012
@@ -0,0 +1,67 @@
+/**
+ * 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.arquillian.openejb;
+
+import org.apache.openejb.util.classloader.URLClassLoaderFirst;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
+import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class SWMavenWarTest {
+ @Deployment
+ public static WebArchive war() {
+ return ShrinkWrap.create(WebArchive.class, "sw-mvn.war")
+ .addClass(SWBean.class)
+
.addAsLibraries(DependencyResolvers.use(MavenDependencyResolver.class)
+ .loadEffectivePom("src/test/resources/a-pom.xml")
+ .importAllDependencies()
+ .resolveAsFiles());
+ }
+
+ @Singleton
+ @TransactionManagement(TransactionManagementType.BEAN)
+ public static class SWBean {
+ public Class<?> gherkin() throws Exception {
+ final ClassLoader loader =
Thread.currentThread().getContextClassLoader();
+ assertThat(loader, instanceOf(URLClassLoaderFirst.class));
+ return loader.loadClass("gherkin.Main");
+ }
+ }
+
+ @EJB
+ private SWBean bean;
+
+ @Test
+ public void check() throws Exception {
+ bean.gherkin(); // if fail will throw an exception
+ }
+}
Added:
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/a-pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/a-pom.xml?rev=1373025&view=auto
==============================================================================
---
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/a-pom.xml
(added)
+++
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/a-pom.xml
Tue Aug 14 18:49:35 2012
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>fake</groupId>
+ <version>fake</version>
+ <artifactId>fake</artifactId>
+
+ <dependencies>
+ <dependency> <!-- whatever it is, just to check we can use it -->
+ <groupId>info.cukes</groupId>
+ <artifactId>gherkin</artifactId>
+ <version>2.11.0</version>
+ </dependency>
+ </dependencies>
+</project>