Neither the arquillian-showcase-ejb example, nor my own test in the moviefun
example for testing ejbs work with the embedded adapter as it stands either
- the ejb isn't getting injected.

I'd be grateful if you could give it a try with the latest code.

I'm afraid I don't understand your last point about @DeploymentScoped. Where
does that need to go? Do I have to change the showcase code beyond
referencing the adapters in the pom? I'm not sure I like that.

There does seem to be an issue where the default ejbenricher with arquillian
would work, except 1. it can't lookup Java:global. I've created an ear and
confirmed I can't look it up from a servlet either, and 2. the global
individual names it uses are slightly different to ours:
Java:global/test.ear/test vs Java:global/test/test.jar.

The first issue really doesn't seem right to me and I think we'll need to
solve that.

Jon
On Oct 27, 2011 11:45 PM, "Romain Manni-Bucau" <[email protected]>
wrote:

> 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