Author: rmannibucau
Date: Thu Nov 22 10:24:10 2012
New Revision: 1412486
URL: http://svn.apache.org/viewvc?rev=1412486&view=rev
Log:
TOMEE-600 injecting a context managing local + remote
Modified:
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
Modified:
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java?rev=1412486&r1=1412485&r2=1412486&view=diff
==============================================================================
---
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
(original)
+++
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
Thu Nov 22 10:24:10 2012
@@ -28,6 +28,9 @@ import org.jboss.arquillian.test.spi.eve
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
import java.util.Properties;
public class RemoteInitialContextObserver {
@@ -54,11 +57,35 @@ public class RemoteInitialContextObserve
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
REMOTE_INITIAL_CONTEXT_FACTORY);
props.setProperty(Context.PROVIDER_URL, "http://" +
httpContext.getHost() + ":" + httpContext.getPort() + "/tomee/ejb");
- context.set(new InitialContext(props));
+ context.set((Context)
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new
Class<?>[]{ Context.class }, new MultipleContextHandler(new InitialContext(),
new InitialContext(props))));
} catch (ClassNotFoundException e) {
// no-op
} catch (NamingException e) {
// no-op
}
}
+
+ private static class MultipleContextHandler implements InvocationHandler {
+ private final InitialContext[] contexts;
+
+ public MultipleContextHandler(final InitialContext... initialContexts)
{
+ contexts = initialContexts;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
+ Exception err = null;
+ for (Context ctx : contexts) {
+ try {
+ return method.invoke(ctx, args);
+ } catch (Exception e) {
+ err = e;
+ }
+ }
+ if (err != null) {
+ throw err;
+ }
+ return null;
+ }
+ }
}