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/07/29 21:15:29 UTC
svn commit: r1614464 -
/tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java
Author: rmannibucau
Date: Tue Jul 29 19:15:29 2014
New Revision: 1614464
URL: http://svn.apache.org/r1614464
Log:
for testng we need the right classloader before TestEvents so pushing it as we can
Modified:
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java
Modified: tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java?rev=1614464&r1=1614463&r2=1614464&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/TestObserver.java Tue Jul 29 19:15:29 2014
@@ -21,12 +21,16 @@ import org.apache.openejb.BeanContext;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
+import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
+import org.jboss.arquillian.container.spi.event.container.AfterDeploy;
import org.jboss.arquillian.container.spi.event.container.BeforeUnDeploy;
import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.InstanceProducer;
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.TestClass;
+import org.jboss.arquillian.test.spi.event.suite.ClassLifecycleEvent;
import org.jboss.arquillian.test.spi.event.suite.TestEvent;
import javax.enterprise.context.spi.CreationalContext;
@@ -38,16 +42,40 @@ public class TestObserver {
@Inject
private Instance<TestClass> testClass;
- public void observes(@Observes final EventContext<TestEvent> event) {
+ @Inject
+ @DeploymentScoped
+ private InstanceProducer<DeploymentContext> contextProducer;
+
+ @Inject
+ private Instance<DeploymentContext> context;
+
+ public void observesDeploy(@Observes final AfterDeploy afterDeployment) {
+ contextProducer.set(new DeploymentContext(Thread.currentThread().getContextClassLoader()));
+ final ClassLoader loader = classLoader.get();
+ if (loader != null) {
+ setTCCL(loader);
+ }
+ }
+
+ public void observesUndeploy(@Observes final BeforeUnDeploy beforeUnDeploy) {
+ final DeploymentContext deploymentContext = context.get();
+ if (deploymentContext != null) {
+ setTCCL(deploymentContext.loader);
+ }
+ }
+
+ public void observesTest(@Observes final EventContext<TestEvent> event) {
+ switchLoader(event);
+ }
+
+ private void switchLoader(final EventContext<?> event) {
if (!SystemInstance.isInitialized()) {
event.proceed();
return;
}
-
final BeanContext context = beanContext();
ThreadContext oldCtx = null;
ClassLoader oldCl = null;
-
if (context != null) {
oldCtx = ThreadContext.enter(new ThreadContext(context, null));
} else {
@@ -56,7 +84,6 @@ public class TestObserver {
setTCCL(classLoader.get());
}
}
-
try {
event.proceed();
} finally {
@@ -102,4 +129,12 @@ public class TestObserver {
}
return null;
}
+
+ public static class DeploymentContext {
+ private final ClassLoader loader;
+
+ public DeploymentContext(final ClassLoader loader) {
+ this.loader = loader;
+ }
+ }
}