i don't get why it doesn't work since everything is in the same webapp?

Note: the ejbenricher needs the context to use to lookup, it can be set
using @Inject @DeployementScoped private Instance<Context> context; then
context.set(new InitialContext()) (in the container)

- Romain


2011/10/27 Romain Manni-Bucau <[email protected]>

> Weird, it seems to work in embedded case.
>
> Le 27 oct. 2011 13:29, "Jonathan Gallimore" <[email protected]>
> a écrit :
>
>  When I first saw your email, I did wonder whether the bean manager code
>> would be enough, and maybe I was just missing the ArchiveAppender stuff to
>> get the Enricher over to the server side. I've retested with the EJB
>> lookup
>> commented out, and unfortunately, It didn't work without my change for the
>> test case I was using (arquillian-showcase-ejb).
>>
>> Jon
>>
>> On Thu, Oct 27, 2011 at 5:29 AM, Romain Manni-Bucau
>> <[email protected]>wrote:
>>
>> > Hi,
>> >
>> > Why beanmanager stuff is not enough?
>> >
>> > - Romain
>> >
>> > ---------- Message transféré ----------
>> > De : <[email protected]>
>> > Date : 27 oct. 2011 01:08
>> > Objet : svn commit: r1189526 - in /openejb/trunk/arquillian-tomee: ./
>> >
>> arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/
>> > arquillian-tomee-remote/
>> >
>> arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/
>> > arquillian-to...
>> > À : <[email protected]>
>> >
>> > Author: jgallimore
>> > Date: Wed Oct 26 23:08:05 2011
>> > New Revision: 1189526
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1189526&view=rev
>> > Log:
>> > Progress on supporting enriching tests with @EJB fields
>> >
>> > Added:
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherExtension.java
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/SecurityActions.java
>> > Removed:
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/resources/META-INF/services/org.jboss.arquillian.spi.TestEnricher
>> > Modified:
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
>> >   openejb/trunk/arquillian-tomee/arquillian-tomee-remote/pom.xml
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEContainer.java
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEnricher.java
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEExtension.java
>> >
>> >
>> >
>>  
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java
>> >   openejb/trunk/arquillian-tomee/pom.xml
>> >
>> > Modified:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
>> > (original)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -36,6 +36,7 @@ import org.jboss.arquillian.container.sp
>> >  import
>> > org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
>> >  import org.jboss.shrinkwrap.api.Archive;
>> >  import org.jboss.shrinkwrap.api.exporter.ZipExporter;
>> > +import org.jboss.shrinkwrap.api.spec.WebArchive;
>> >  import org.jboss.shrinkwrap.descriptor.api.Descriptor;
>> >
>> >  public abstract class TomEEContainer implements
>> > DeployableContainer<TomEEConfiguration> {
>> > @@ -86,7 +87,7 @@ public abstract class TomEEContainer imp
>> >    }
>> >
>> >    public ProtocolDescription getDefaultProtocol() {
>> > -        return new ProtocolDescription("Servlet 3.0");
>> > +        return new ProtocolDescription("Servlet 2.5");
>> >    }
>> >
>> >    public ProtocolMetaData deploy(Archive<?> archive) throws
>> > DeploymentException {
>> > @@ -107,7 +108,12 @@ public abstract class TomEEContainer imp
>> >            moduleIds.put(archive.getName(), file.getAbsolutePath());
>> >
>> >            HTTPContext httpContext = new HTTPContext("0.0.0.0",
>> > configuration.getHttpPort());
>> > -            httpContext.add(new Servlet("ArquillianServletRunner", "/"
>> +
>> > getArchiveNameWithoutExtension(archive)));
>> > +            if (archive instanceof WebArchive) {
>> > +               httpContext.add(new Servlet("ArquillianServletRunner",
>> "/"
>> > +
>> > getArchiveNameWithoutExtension(archive)));
>> > +            } else {
>> > +               httpContext.add(new Servlet("ArquillianServletRunner",
>> > "/arquillian-protocol"));
>> > +            }
>> > +
>> >            // we should probably get all servlets and add them to the
>> > context
>> >            return new ProtocolMetaData().addContext(httpContext);
>> >        } catch (Exception e) {
>> >
>> > Modified: openejb/trunk/arquillian-tomee/arquillian-tomee-remote/pom.xml
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/pom.xml?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > --- openejb/trunk/arquillian-tomee/arquillian-tomee-remote/pom.xml
>> > (original)
>> > +++ openejb/trunk/arquillian-tomee/arquillian-tomee-remote/pom.xml Wed
>> Oct
>> > 26 23:08:05 2011
>> > @@ -333,5 +333,12 @@
>> >       <artifactId>swizzle-stream</artifactId>
>> >       <version>1.0.2</version>
>> >    </dependency>
>> > +    <dependency>
>> > +       <groupId>org.jboss.shrinkwrap.descriptors</groupId>
>> > +       <artifactId>shrinkwrap-descriptors-impl</artifactId>
>> > +       <version>1.1.0-alpha-2</version>
>> > +       <type>jar</type>
>> > +       <scope>compile</scope>
>> > +    </dependency>
>> >  </dependencies>
>> >  </project>
>> >
>> > Modified:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEContainer.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEContainer.java?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEContainer.java
>> > (original)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEContainer.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -77,6 +77,7 @@ public class RemoteTomEEContainer extend
>> >
>> >                   System.setProperty("catalina.home",
>> > openejbHome.getAbsolutePath());
>> >                           System.setProperty("catalina.base",
>> > openejbHome.getAbsolutePath());
>> > +
>> >
>> >
>> System.setProperty("openejb.deploymentId.format","{appId}/{ejbJarId}/{ejbName}");
>> >                           Paths paths = new Paths(new
>> > File(openejbHome.getAbsolutePath(), "/webapps/openejb"));
>> >                           Installer installer = new Installer(paths,
>> true);
>> >                           installer.installAll();
>> >
>> > Added:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java?rev=1189526&view=auto
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
>> > (added)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -0,0 +1,18 @@
>> > +package org.apache.openejb.arquillian.remote;
>> > +
>> > +import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
>> > +import
>> >
>> >
>> org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
>> > +import org.jboss.shrinkwrap.api.Archive;
>> > +import org.jboss.shrinkwrap.api.ShrinkWrap;
>> > +import org.jboss.shrinkwrap.api.spec.JavaArchive;
>> > +
>> > +public class RemoteTomEEEJBEnricherArchiveAppender implements
>> > AuxiliaryArchiveAppender
>> > +{
>> > +          @Override
>> > +          public Archive<?> createAuxiliaryArchive()
>> > +          {
>> > +             return ShrinkWrap.create(JavaArchive.class,
>> > "arquillian-tomee-testenricher-ejb.jar")
>> > +                         .addClasses(RemoteTomEEEnricher.class,
>> > RemoteTomEEEJBEnricherExtension.class, SecurityActions.class)
>> > +
>> > .addAsServiceProvider(RemoteLoadableExtension.class,
>> > RemoteTomEEEJBEnricherExtension.class);
>> > +          }
>> > +       }
>> > \ No newline at end of file
>> >
>> > Added:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherExtension.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherExtension.java?rev=1189526&view=auto
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherExtension.java
>> > (added)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEJBEnricherExtension.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -0,0 +1,13 @@
>> > +package org.apache.openejb.arquillian.remote;
>> > +
>> > +import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
>> > +import org.jboss.arquillian.test.spi.TestEnricher;
>> > +
>> > +public class RemoteTomEEEJBEnricherExtension implements
>> > RemoteLoadableExtension {
>> > +    @Override public void register(ExtensionBuilder builder) {
>> > +       // only load if EJB is on ClassPath
>> > +        if(Validate.classExists("javax.ejb.EJB")) {
>> > +           builder.service(TestEnricher.class,
>> > org.apache.openejb.arquillian.remote.RemoteTomEEEnricher.class);
>> > +        }
>> > +    }
>> > +}
>> >
>> > Modified:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEnricher.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEnricher.java?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEnricher.java
>> > (original)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEEnricher.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -3,45 +3,122 @@ package org.apache.openejb.arquillian.re
>> >  import org.apache.openejb.cdi.ThreadSingletonServiceImpl;
>> >  import org.jboss.arquillian.test.spi.TestEnricher;
>> >
>> > +import javax.ejb.EJB;
>> >  import javax.enterprise.context.spi.CreationalContext;
>> >  import javax.enterprise.inject.spi.AnnotatedType;
>> >  import javax.enterprise.inject.spi.BeanManager;
>> >  import javax.enterprise.inject.spi.InjectionTarget;
>> > +import javax.naming.Context;
>> > +import javax.naming.InitialContext;
>> > +import javax.naming.NamingException;
>> > +
>> > +import java.lang.annotation.Annotation;
>> > +import java.lang.reflect.Field;
>> >  import java.lang.reflect.Method;
>> > +import java.util.List;
>> >
>> >  public class RemoteTomEEEnricher implements TestEnricher {
>> > -    @Override public void enrich(Object testCase) {
>> > -//        BeanManager mgr = getBeanManager();
>> > -//        if (mgr != null) {
>> > -//            AnnotatedType<?> type =
>> >  mgr.createAnnotatedType(getClass());
>> > -//            InjectionTarget<Object> injectionTarget =
>> > (InjectionTarget<Object>) mgr.createInjectionTarget(type);
>> > -//            CreationalContext<Object> context =
>> > mgr.createCreationalContext(null);
>> > -//
>> > -//            injectionTarget.inject(testCase, context);
>> > -//            injectionTarget.postConstruct(this);
>> > -//        } else {
>> > -//            throw new NullPointerException("bean manager is null");
>> > -//        }
>> > -
>> > -        /* TODO: see if this code could be called after tests
>> > -                *
>> > -                * if (injectionTarget != null) {
>> > -                *        injectionTarget.preDestroy(this);
>> > -                *    }
>> > -                *   if (context != null) {
>> > -                *        context.release();
>> > -                *    }
>> > -                *
>> > -                *   injectionTarget = null;
>> > -                *   context = null;
>> > -                */
>> > -    }
>> > -
>> > -    @Override public Object[] resolve(Method method) {
>> > -        return new Object[method.getParameterTypes().length];
>> > -    }
>> > -
>> > -    public BeanManager getBeanManager() {
>> > -        return ThreadSingletonServiceImpl.get().getBeanManagerImpl();
>> > -    }
>> > +
>> > +       private static final String ANNOTATION_NAME = "javax.ejb.EJB";
>> > +
>> > +       public void enrich(Object testCase) {
>> > +               BeanManager mgr = getBeanManager();
>> > +               if (mgr != null) {
>> > +                       AnnotatedType<?> type =
>> > mgr.createAnnotatedType(getClass());
>> > +                       InjectionTarget<Object> injectionTarget =
>> > (InjectionTarget<Object>) mgr.createInjectionTarget(type);
>> > +                       CreationalContext<Object> context =
>> > mgr.createCreationalContext(null);
>> > +
>> > +                       injectionTarget.inject(testCase, context);
>> > +                       injectionTarget.postConstruct(this);
>> > +               }
>> > +
>> > +               try {
>> > +                       if
>> > (SecurityActions.isClassPresent(ANNOTATION_NAME))
>> > {
>> > +                               @SuppressWarnings("unchecked")
>> > +                               Class<? extends Annotation>
>> ejbAnnotation =
>> > (Class<? extends Annotation>)
>> >
>> SecurityActions.getThreadContextClassLoader().loadClass(ANNOTATION_NAME);
>> > +
>> > +                               List<Field> annotatedFields =
>> > SecurityActions.getFieldsWithAnnotation(testCase.getClass(),
>> > ejbAnnotation);
>> > +
>> > +                               for (Field field : annotatedFields) {
>> > +                                       if (field.get(testCase) == null)
>> {
>> > +                                               EJB fieldAnnotation =
>> (EJB)
>> > field.getAnnotation(ejbAnnotation);
>> > +                                               Object ejb =
>> > lookupEJB(field.getType(), fieldAnnotation.mappedName());
>> > +                                               field.set(testCase,
>> ejb);
>> > +                                       }
>> > +                               }
>> > +
>> > +                               List<Method> methods =
>> > SecurityActions.getMethodsWithAnnotation(testCase.getClass(),
>> > ejbAnnotation);
>> > +
>> > +                               for (Method method : methods) {
>> > +                                       if
>> > (method.getParameterTypes().length != 1) {
>> > +                                               throw new
>> > RuntimeException("@EJB only allowed on single argument methods");
>> > +                                       }
>> > +                                       if
>> > (!method.getName().startsWith("set")) {
>> > +                                               throw new
>> > RuntimeException("@EJB only allowed on 'set' methods");
>> > +                                       }
>> > +                                       EJB parameterAnnotation = null;
>> //
>> > method.getParameterAnnotations()[0]
>> > +                                       for (Annotation annotation :
>> > method.getParameterAnnotations()[0]) {
>> > +                                               if
>> > (EJB.class.isAssignableFrom(annotation.annotationType())) {
>> > +
>> parameterAnnotation
>> > = (EJB) annotation;
>> > +                                               }
>> > +                                       }
>> > +                                       String mappedName =
>> > parameterAnnotation == null ? null : parameterAnnotation.mappedName();
>> > +                                       Object ejb =
>> > lookupEJB(method.getParameterTypes()[0], mappedName);
>> > +                                       method.invoke(testCase, ejb);
>> > +                               }
>> > +
>> > +                       }
>> > +               } catch (Exception e) {
>> > +
>> > +               }
>> > +
>> > +       }
>> > +
>> > +       protected Object lookupEJB(Class<?> fieldType, String
>> mappedName)
>> > throws Exception {
>> > +               // TODO: figure out test context ?
>> > +               Context initcontext = new InitialContext();
>> > +
>> > +               // TODO: These names are not spec compliant; fieldType
>> > needs
>> > to be a
>> > +               // bean type here,
>> > +               // but usually is just an interface of a bean. These
>> seldom
>> > work.
>> > +               String[] jndiNames = {
>> > "openejb:global/global/test/test.jar/" + fieldType.getSimpleName() +
>> > "Bean",
>> > +                               "openejb:global/global/test/test.jar/" +
>> > fieldType.getSimpleName(),
>> > +                               "java:global/test/test.jar/" +
>> > fieldType.getSimpleName() + "Bean",
>> > +                               "java:global/test/test.jar/" +
>> > fieldType.getSimpleName(),
>> > +                               "java:global/test.ear/test/" +
>> > fieldType.getSimpleName() + "Bean",
>> > +                               "java:global/test.ear/test/" +
>> > fieldType.getSimpleName(),
>> > +                               "java:global/test/" +
>> > fieldType.getSimpleName(),
>> > +                               "java:global/test/" +
>> > fieldType.getSimpleName() + "Bean",
>> > +                               "java:global/test/" +
>> > fieldType.getSimpleName() + "/no-interface",
>> > +                               "test/" + fieldType.getSimpleName() +
>> > "Bean/local",
>> > +                               "test/" + fieldType.getSimpleName() +
>> > "Bean/remote",
>> > +                               "test/" + fieldType.getSimpleName() +
>> > "/no-interface",
>> > +                               fieldType.getSimpleName() +
>> "Bean/local",
>> > +                               fieldType.getSimpleName() +
>> "Bean/remote",
>> > +                               fieldType.getSimpleName() +
>> > "/no-interface",
>> > +                               "ejblocal:" +
>> fieldType.getCanonicalName(),
>> > +                               fieldType.getCanonicalName() };
>> > +               if ((mappedName != null) && (!mappedName.equals(""))) {
>> > +                       // Use only the mapped name to lookup this EJB
>> > +                       jndiNames = new String[] { mappedName };
>> > +               }
>> > +
>> > +               for (String jndiName : jndiNames) {
>> > +                       try {
>> > +                               return initcontext.lookup(jndiName);
>> > +                       } catch (NamingException e) {
>> > +                               // no-op, try next
>> > +                       }
>> > +               }
>> > +               throw new NamingException("No EJB found in JNDI");
>> > +       }
>> > +
>> > +       @Override
>> > +       public Object[] resolve(Method method) {
>> > +               return new Object[method.getParameterTypes().length];
>> > +       }
>> > +
>> > +       public BeanManager getBeanManager() {
>> > +               return
>> > ThreadSingletonServiceImpl.get().getBeanManagerImpl();
>> > +       }
>> >  }
>> >
>> > Modified:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEExtension.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEExtension.java?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEExtension.java
>> > (original)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/RemoteTomEEExtension.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -1,12 +1,12 @@
>> >  package org.apache.openejb.arquillian.remote;
>> >
>> >  import
>> > org.jboss.arquillian.container.spi.client.container.DeployableContainer;
>> > +import
>> >
>> >
>> org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
>> >  import org.jboss.arquillian.core.spi.LoadableExtension;
>> > -import org.jboss.arquillian.test.spi.TestEnricher;
>> >
>> >  public class RemoteTomEEExtension implements LoadableExtension {
>> >    @Override public void register(ExtensionBuilder builder) {
>> >        builder.service(DeployableContainer.class,
>> > RemoteTomEEContainer.class)
>> > -            .service(TestEnricher.class, RemoteTomEEEnricher.class);
>> > +            .service(AuxiliaryArchiveAppender.class,
>> > RemoteTomEEEJBEnricherArchiveAppender.class);
>> >    }
>> >  }
>> >
>> > Added:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/SecurityActions.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/SecurityActions.java?rev=1189526&view=auto
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/SecurityActions.java
>> > (added)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/main/java/org/apache/openejb/arquillian/remote/SecurityActions.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -0,0 +1,249 @@
>> > +/*
>> > + * JBoss, Home of Professional Open Source
>> > + * Copyright 2009, Red Hat Middleware LLC, and individual contributors
>> > + * by the @authors tag. See the copyright.txt in the distribution for a
>> > + * full listing of individual contributors.
>> > + *
>> > + * Licensed 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.remote;
>> > +
>> > +import java.lang.annotation.Annotation;
>> > +import java.lang.reflect.Constructor;
>> > +import java.lang.reflect.Field;
>> > +import java.lang.reflect.Method;
>> > +import java.security.AccessController;
>> > +import java.security.PrivilegedAction;
>> > +import java.security.PrivilegedActionException;
>> > +import java.security.PrivilegedExceptionAction;
>> > +import java.util.ArrayList;
>> > +import java.util.List;
>> > +
>> > +/**
>> > + * SecurityActions
>> > + *
>> > + * A set of privileged actions that are not to leak out
>> > + * of this package
>> > + *
>> > + * @author <a href="mailto:[email protected]";>ALR</a>
>> > + * @version $Revision: $
>> > + */
>> > +final class SecurityActions
>> > +{
>> > +
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +   // Constructor
>> > ------------------------------------------------------------------||
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +
>> > +   /**
>> > +    * No instantiation
>> > +    */
>> > +   private SecurityActions()
>> > +   {
>> > +      throw new UnsupportedOperationException("No instantiation");
>> > +   }
>> > +
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +   // Utility Methods
>> > --------------------------------------------------------------||
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +
>> > +   /**
>> > +    * Obtains the Thread Context ClassLoader
>> > +    */
>> > +   static ClassLoader getThreadContextClassLoader()
>> > +   {
>> > +      return AccessController.doPrivileged(GetTcclAction.INSTANCE);
>> > +   }
>> > +
>> > +   /**
>> > +    * Obtains the Constructor specified from the given Class and
>> argument
>> > types
>> > +    * @param clazz
>> > +    * @param argumentTypes
>> > +    * @return
>> > +    * @throws NoSuchMethodException
>> > +    */
>> > +   static Constructor<?> getConstructor(final Class<?> clazz, final
>> > Class<?>... argumentTypes)
>> > +         throws NoSuchMethodException
>> > +   {
>> > +      try
>> > +      {
>> > +         return AccessController.doPrivileged(new
>> > PrivilegedExceptionAction<Constructor<?>>()
>> > +         {
>> > +            public Constructor<?> run() throws NoSuchMethodException
>> > +            {
>> > +               return clazz.getConstructor(argumentTypes);
>> > +            }
>> > +         });
>> > +      }
>> > +      // Unwrap
>> > +      catch (final PrivilegedActionException pae)
>> > +      {
>> > +         final Throwable t = pae.getCause();
>> > +         // Rethrow
>> > +         if (t instanceof NoSuchMethodException)
>> > +         {
>> > +            throw (NoSuchMethodException) t;
>> > +         }
>> > +         else
>> > +         {
>> > +            // No other checked Exception thrown by
>> Class.getConstructor
>> > +            try
>> > +            {
>> > +               throw (RuntimeException) t;
>> > +            }
>> > +            // Just in case we've really messed up
>> > +            catch (final ClassCastException cce)
>> > +            {
>> > +               throw new RuntimeException("Obtained unchecked
>> Exception;
>> > this code should never be reached", t);
>> > +            }
>> > +         }
>> > +      }
>> > +   }
>> > +
>> > +   /**
>> > +    * Create a new instance by finding a constructor that matches the
>> > argumentTypes signature
>> > +    * using the arguments for instantiation.
>> > +    *
>> > +    * @param className Full classname of class to create
>> > +    * @param argumentTypes The constructor argument types
>> > +    * @param arguments The constructor arguments
>> > +    * @return a new instance
>> > +    * @throws IllegalArgumentException if className, argumentTypes, or
>> > arguments are null
>> > +    * @throws RuntimeException if any exceptions during creation
>> > +    * @author <a href="mailto:[email protected]";>Aslak Knutsen</a>
>> > +    * @author <a href="mailto:[email protected]";>ALR</a>
>> > +    */
>> > +   static <T> T newInstance(final String className, final Class<?>[]
>> > argumentTypes, final Object[] arguments,
>> > +         final Class<T> expectedType)
>> > +   {
>> > +      if (className == null)
>> > +      {
>> > +         throw new IllegalArgumentException("ClassName must be
>> > specified");
>> > +      }
>> > +      if (argumentTypes == null)
>> > +      {
>> > +         throw new IllegalArgumentException("ArgumentTypes must be
>> > specified. Use empty array if no arguments");
>> > +      }
>> > +      if (arguments == null)
>> > +      {
>> > +         throw new IllegalArgumentException("Arguments must be
>> specified.
>> > Use empty array if no arguments");
>> > +      }
>> > +      final Object obj;
>> > +      try
>> > +      {
>> > +         final ClassLoader tccl = getThreadContextClassLoader();
>> > +         final Class<?> implClass = Class.forName(className, false,
>> tccl);
>> > +         Constructor<?> constructor = getConstructor(implClass,
>> > argumentTypes);
>> > +         obj = constructor.newInstance(arguments);
>> > +      }
>> > +      catch (Exception e)
>> > +      {
>> > +         throw new RuntimeException("Could not create new instance of "
>> +
>> > className
>> > +               + ", missing package from classpath?", e);
>> > +      }
>> > +
>> > +      // Cast
>> > +      try
>> > +      {
>> > +         return expectedType.cast(obj);
>> > +      }
>> > +      catch (final ClassCastException cce)
>> > +      {
>> > +         // Reconstruct so we get some useful information
>> > +         throw new ClassCastException("Incorrect expected type, " +
>> > expectedType.getName() + ", defined for "
>> > +               + obj.getClass().getName());
>> > +      }
>> > +   }
>> > +
>> > +   public static boolean isClassPresent(String name)
>> > +   {
>> > +      try
>> > +      {
>> > +         ClassLoader classLoader = getThreadContextClassLoader();
>> > +         classLoader.loadClass(name);
>> > +         return true;
>> > +      }
>> > +      catch (ClassNotFoundException e)
>> > +      {
>> > +         return false;
>> > +      }
>> > +   }
>> > +
>> > +   public static List<Field> getFieldsWithAnnotation(final Class<?>
>> > source,
>> > final Class<? extends Annotation> annotationClass)
>> > +   {
>> > +      List<Field> declaredAccessableFields =
>> > AccessController.doPrivileged(new PrivilegedAction<List<Field>>()
>> > +      {
>> > +         public List<Field> run()
>> > +         {
>> > +            List<Field> foundFields = new ArrayList<Field>();
>> > +            Class<?> nextSource = source;
>> > +            while (nextSource != Object.class) {
>> > +               for(Field field : nextSource.getDeclaredFields())
>> > +               {
>> > +                  if(field.isAnnotationPresent(annotationClass))
>> > +                  {
>> > +                     if(!field.isAccessible())
>> > +                     {
>> > +                        field.setAccessible(true);
>> > +                     }
>> > +                     foundFields.add(field);
>> > +                  }
>> > +               }
>> > +               nextSource = nextSource.getSuperclass();
>> > +            }
>> > +            return foundFields;
>> > +         }
>> > +      });
>> > +      return declaredAccessableFields;
>> > +   }
>> > +
>> > +   public static List<Method> getMethodsWithAnnotation(final Class<?>
>> > source, final Class<? extends Annotation> annotationClass)
>> > +   {
>> > +      List<Method> declaredAccessableMethods =
>> > AccessController.doPrivileged(new PrivilegedAction<List<Method>>()
>> > +      {
>> > +         public List<Method> run()
>> > +         {
>> > +            List<Method> foundMethods = new ArrayList<Method>();
>> > +            for(Method method : source.getDeclaredMethods())
>> > +            {
>> > +               if(method.isAnnotationPresent(annotationClass))
>> > +               {
>> > +                  if(!method.isAccessible())
>> > +                  {
>> > +                     method.setAccessible(true);
>> > +                  }
>> > +                  foundMethods.add(method);
>> > +               }
>> > +            }
>> > +            return foundMethods;
>> > +         }
>> > +      });
>> > +      return declaredAccessableMethods;
>> > +   }
>> > +
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +   // Inner Classes
>> > ----------------------------------------------------------------||
>> > +
>> >
>> >
>> //-------------------------------------------------------------------------------||
>> > +
>> > +   /**
>> > +    * Single instance to get the TCCL
>> > +    */
>> > +   private enum GetTcclAction implements PrivilegedAction<ClassLoader>
>> {
>> > +      INSTANCE;
>> > +
>> > +      public ClassLoader run()
>> > +      {
>> > +         return Thread.currentThread().getContextClassLoader();
>> > +      }
>> > +
>> > +   }
>> > +
>> > +}
>> >
>> > Modified:
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > ---
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java
>> > (original)
>> > +++
>> >
>> >
>> openejb/trunk/arquillian-tomee/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java
>> > Wed Oct 26 23:08:05 2011
>> > @@ -20,6 +20,8 @@ import java.io.ByteArrayOutputStream;
>> >  import java.io.InputStream;
>> >  import java.net.URL;
>> >
>> > +import javax.ejb.EJB;
>> > +
>> >  import junit.framework.Assert;
>> >
>> >  import org.jboss.arquillian.container.test.api.Deployment;
>> > @@ -35,15 +37,21 @@ import org.junit.runner.RunWith;
>> >  @RunWith(Arquillian.class)
>> >  public class TomEEContainerTest {
>> >
>> > -    @Deployment(testable = false)
>> > +    @Deployment
>> >    public static WebArchive createDeployment() {
>> > -        return ShrinkWrap.create(WebArchive.class,
>> > "test.war").addClass(TestServlet.class).addClass(TestEjb.class)
>> > +        return ShrinkWrap.create(WebArchive.class,
>> >
>> >
>> "test.war").addClass(TestServlet.class).addClass(TestEjb.class).addClass(TomEEContainerTest.class)
>> >                .setWebXML(new
>> >
>> >
>> StringAsset(Descriptors.create(WebAppDescriptor.class).version("3.0").servlet(TestServlet.class,
>> > "/Test").exportAsString()));
>> >    }
>> >
>> > -    @Test
>> > -    public void nothing(){}
>> > +    @EJB
>> > +    private TestEjb ejb;
>> > +
>> > +    @Test
>> > +    public void testEjbIsNotNull() throws Exception {
>> > +       Assert.assertNotNull(ejb);
>> > +    }
>> >
>> > +    @Test
>> >    public void testShouldBeAbleToAccessServletAndEjb() throws Exception
>> {
>> >        InputStream is = new URL("http://localhost:9080/test/Test
>> > ").openStream();
>> >        ByteArrayOutputStream os = new ByteArrayOutputStream();
>> >
>> > Modified: openejb/trunk/arquillian-tomee/pom.xml
>> > URL:
>> >
>> >
>> http://svn.apache.org/viewvc/openejb/trunk/arquillian-tomee/pom.xml?rev=1189526&r1=1189525&r2=1189526&view=diff
>> >
>> >
>> ==============================================================================
>> > --- openejb/trunk/arquillian-tomee/pom.xml (original)
>> > +++ openejb/trunk/arquillian-tomee/pom.xml Wed Oct 26 23:08:05 2011
>> > @@ -49,7 +49,7 @@
>> >
>> >  <properties>
>> >    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>> > -    <version.arquillian>1.0.0.CR1</version.arquillian>
>> > +    <version.arquillian>1.0.0.CR4</version.arquillian>
>> >    <version.cdi-api>1.0</version.cdi-api>
>> >    <version.openejb>4.0.0-beta-2-SNAPSHOT</version.openejb>
>> >    <version.org.apache.tomcat>7.0.21</version.org.apache.tomcat>
>> >
>>
>

Reply via email to