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 2012/04/26 01:10:50 UTC

svn commit: r1330596 - in /openejb/trunk/openejb: arquillian-tomee/ arquillian-tomee/arquillian-openejb-container/ arquillian-tomee/arquillian-openejb-container/src/ arquillian-tomee/arquillian-openejb-container/src/main/ arquillian-tomee/arquillian-op...

Author: rmannibucau
Date: Wed Apr 25 23:10:49 2012
New Revision: 1330596

URL: http://svn.apache.org/viewvc?rev=1330596&view=rev
Log:
adding arquillian-openejb-container

Added:
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/pom.xml
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/SimpleArquillianStandaloneTest.java
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/
    openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/arquillian.xml
Modified:
    openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-embedded/pom.xml
    openejb/trunk/openejb/arquillian-tomee/pom.xml
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/pom.xml?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/pom.xml (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/pom.xml Wed Apr 25 23:10:49 2012
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+  <parent>
+    <artifactId>arquillian-tomee</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>1.0.0-beta-3-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>arquillian-openejb-container</artifactId>
+  <name>OpenEJB :: TomEE Arquillian Adaptor :: OpenEJB Container</name> <!-- TODO: rename parent to be arquillian-parent -->
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>${version.openejb}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-container-spi</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-container-test-spi</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.arquillian.testenricher</groupId>
+      <artifactId>arquillian-testenricher-cdi</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.arquillian.testenricher</groupId>
+      <artifactId>arquillian-testenricher-resource</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.arquillian.testenricher</groupId>
+      <artifactId>arquillian-testenricher-ejb</artifactId>
+      <version>${version.arquillian}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
+      <artifactId>shrinkwrap-descriptors-impl</artifactId>
+      <version>${version.shrinkwrap.descriptor}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
+      <artifactId>shrinkwrap-descriptors-api</artifactId>
+      <version>${version.shrinkwrap.descriptor}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>${javaee-api.version}</version>
+    </dependency>
+  </dependencies>
+</project>

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,92 @@
+package org.apache.openejb.arquillian.openejb;
+
+import java.io.IOException;
+import org.apache.openejb.loader.IO;
+import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
+import org.jboss.arquillian.test.spi.TestClass;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ArchivePath;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.Node;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+
+public class OpenEJBArchiveProcessor implements ApplicationArchiveProcessor {
+    private static final String EJB_JAR_XML = "ejb-jar.xml";
+    private static final String WEB_INF = "/WEB-INF";
+    private static final String META_INF = "/META-INF";
+
+    @Override
+    public void process(final Archive<?> archive, final TestClass testClass) {
+        final ArchivePath path = ArchivePaths.create(EJB_JAR_XML);
+        final Asset newAsset;
+        if (archive.contains(ArchivePaths.create(path.get()))) {
+            final Node node = archive.get(path);
+            final Asset asset = node.getAsset();
+            newAsset = enhancedAsset(asset, testClass.getJavaClass());
+        } else {
+            newAsset = new StringAsset(ejbJar(testClass.getJavaClass()));
+        }
+
+
+        if (archive instanceof WebArchive) {
+            archive.delete(WEB_INF + path.get());
+            ((WebArchive) archive).addAsWebInfResource(newAsset, path);
+        } else if (archive instanceof JavaArchive) {
+            archive.delete(META_INF + path.get());
+            ((JavaArchive) archive).addAsManifestResource(newAsset, path);
+        }
+    }
+
+    private Asset enhancedAsset(Asset asset, Class<?> javaClass) {
+        if (asset instanceof EmptyAsset) {
+            return new StringAsset(ejbJar(javaClass));
+        } else {
+            String content;
+            try {
+                content = IO.slurp(asset.openStream());
+            } catch (IOException e) {
+                content = "";
+            }
+
+            if (content == null || content.isEmpty()) {
+                return new StringAsset(ejbJar(javaClass));
+            } else if (content.contains("<enterprise-beans>")) {
+                content = content.replace("<enterprise-beans>", "<enterprise-beans>\n" + managedBeanBlock(javaClass));
+                return new StringAsset(content);
+            } else if (content.contains("<ejb-jar>")) {
+                content = content.replace("<ejb-jar>", "<ejb-jar>\n" + enterpriseBean(javaClass));
+                return new StringAsset(content);
+            }
+            return asset; // shouldn't happen
+        }
+    }
+
+    private String enterpriseBean(final Class<?> clazz) {
+        return "   <enterprise-beans>\n" +
+                managedBeanBlock(clazz) +
+                "   </enterprise-beans>\n";
+    }
+
+    private String ejbJar(final Class<?> clazz) {
+        return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" \n" +
+                "         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" +
+                "         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\"\n" +
+                "         version=\"3.0\">\n" +
+                enterpriseBean(clazz) +
+                "</ejb-jar>\n";
+    }
+
+    private String managedBeanBlock(final Class<?> clazz) {
+        return "      <session>\n" +
+                "         <ejb-name>" + clazz.getSimpleName() + "</ejb-name>\n" +
+                "         <ejb-class>" + clazz.getName() + "</ejb-class>\n" +
+                "         <session-type>Managed</session-type>\n" +
+                "         <transaction-type>Bean</transaction-type>\n" +
+                "      </session>\n";
+    }
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,11 @@
+package org.apache.openejb.arquillian.openejb;
+
+import org.jboss.arquillian.container.spi.ConfigurationException;
+import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
+
+public class OpenEJBConfiguration implements ContainerConfiguration {
+    @Override
+    public void validate() throws ConfigurationException {
+        // no-op
+    }
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,137 @@
+package org.apache.openejb.arquillian.openejb;
+
+import java.io.File;
+import java.util.Properties;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.assembler.DeployerEjb;
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.config.DeploymentFilterable;
+import org.apache.openejb.core.LocalInitialContext;
+import org.apache.openejb.core.LocalInitialContextFactory;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.container.spi.client.container.DeploymentException;
+import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
+import org.jboss.arquillian.container.spi.context.annotation.ContainerScoped;
+import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
+import org.jboss.arquillian.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.descriptor.api.Descriptor;
+
+public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBConfiguration> {
+    private static final String DEPLOYMENT_SUB_DIR = "/arquillian-openejb-working-dir";
+    private static final Properties PROPERTIES = new Properties();
+
+    static {
+        PROPERTIES.setProperty(Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());
+        PROPERTIES.setProperty(LocalInitialContext.ON_CLOSE, LocalInitialContext.Close.DESTROY.name());
+        PROPERTIES.setProperty(DeploymentFilterable.DEPLOYMENTS_CLASSPATH_PROPERTY, "false");
+    }
+
+    private InitialContext initialContext;
+    private DeployerEjb deployer;
+    private File baseDeploymentDir;
+    private File archiveFile;
+    private ContainerSystem containerSystem;
+
+
+    @Inject
+    @DeploymentScoped
+    private InstanceProducer<AppContext> appContextProducer;
+
+    @Inject
+    @ContainerScoped
+    private InstanceProducer<ContainerSystem> containerSystemProducer;
+
+    @Override
+    public Class<OpenEJBConfiguration> getConfigurationClass() {
+        return OpenEJBConfiguration.class;
+    }
+
+    @Override
+    public void setup(final OpenEJBConfiguration openEJBConfiguration) {
+        // no-op
+    }
+
+    @Override
+    public void start() throws LifecycleException {
+        try {
+            initialContext = new InitialContext(PROPERTIES);
+        } catch (NamingException e) {
+            throw new LifecycleException("can't start the OpenEJB container", e);
+        }
+
+        deployer = new DeployerEjb();
+        baseDeploymentDir = new File(System.getProperty("java.io.tmpdir") + DEPLOYMENT_SUB_DIR);
+        containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
+        containerSystemProducer.set(containerSystem);
+    }
+
+    @Override
+    public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentException {
+        int i = 0;
+        do {
+            archiveFile = new File(baseDeploymentDir, i++ + "/" + archive.getName());
+        } while (archiveFile.exists());
+        Files.mkdirs(archiveFile.getParentFile());
+        archive.as(ZipExporter.class).exportTo(archiveFile, true);
+
+        try {
+            final AppInfo info = deployer.deploy(archiveFile.getCanonicalPath());
+            final AppContext appCtx = containerSystem.getAppContext(info.appId);
+            appContextProducer.set(appCtx);
+        } catch (Exception e) {
+            throw new DeploymentException("can't deploy " + archive.getName(), e);
+        }
+        return new ProtocolMetaData();
+    }
+
+    @Override
+    public void undeploy(final Archive<?> archive) throws DeploymentException {
+        try {
+            deployer.undeploy(archiveFile.getCanonicalPath());
+            Files.delete(archiveFile);
+        } catch (Exception e) {
+            throw new DeploymentException("can't undeploy " + archive.getName(), e);
+        }
+    }
+
+    @Override
+    public void stop() throws LifecycleException {
+        try {
+            if (initialContext != null) {
+                initialContext.close();
+            }
+        } catch (NamingException e) {
+            throw new LifecycleException("can't close the OpenEJB container", e);
+        } finally {
+            OpenEJB.destroy();
+            Files.delete(baseDeploymentDir);
+        }
+    }
+
+    @Override
+    public ProtocolDescription getDefaultProtocol() {
+        return new ProtocolDescription("Local");
+    }
+
+    @Override
+    public void deploy(Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void undeploy(Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBExtension.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,15 @@
+package org.apache.openejb.arquillian.openejb;
+
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
+import org.jboss.arquillian.core.spi.LoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
+
+public class OpenEJBExtension implements LoadableExtension {
+    @Override
+    public void register(final ExtensionBuilder extensionBuilder) {
+        extensionBuilder.service(DeployableContainer.class, OpenEJBDeployableContainer.class)
+            .service(TestEnricher.class, OpenEJBInjectionEnricher.class)
+            .service(ApplicationArchiveProcessor.class, OpenEJBArchiveProcessor.class);
+    }
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,55 @@
+package org.apache.openejb.arquillian.openejb;
+
+import java.lang.reflect.Method;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.InjectionProcessor;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.webbeans.inject.OWBInjector;
+import org.jboss.arquillian.container.spi.context.annotation.ContainerScoped;
+import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.spi.TestEnricher;
+
+public class OpenEJBInjectionEnricher implements TestEnricher {
+    @Inject
+    @DeploymentScoped
+    private Instance<AppContext> appContext;
+
+    @Inject
+    @ContainerScoped
+    private Instance<ContainerSystem> containerSystem;
+
+    @Override
+    public void enrich(final Object testInstance) {
+        try {
+            OWBInjector beanInjector = new OWBInjector(appContext.get().getWebBeansContext());
+            beanInjector.inject(testInstance);
+        } catch (Throwable t) {
+            // ignored
+        }
+
+        final BeanContext context = containerSystem.get().getBeanContext(testInstance.getClass().getSimpleName());
+        if (context != null) {
+            ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION);
+            ThreadContext oldContext = ThreadContext.enter(callContext);
+            try {
+                final InjectionProcessor processor = new InjectionProcessor(testInstance, context.getInjections(), context.getJndiContext());
+                processor.createInstance();
+            } catch (OpenEJBException e) {
+                // ignored
+            } finally {
+                ThreadContext.exit(oldContext);
+            }
+        }
+    }
+
+    @Override
+    public Object[] resolve(final Method method) {
+        return new Object[method.getParameterTypes().length];
+    }
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension Wed Apr 25 23:10:49 2012
@@ -0,0 +1 @@
+org.apache.openejb.arquillian.openejb.OpenEJBExtension

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/SimpleArquillianStandaloneTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/SimpleArquillianStandaloneTest.java?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/SimpleArquillianStandaloneTest.java (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/java/org/apache/openejb/arquillian/openejb/SimpleArquillianStandaloneTest.java Wed Apr 25 23:10:49 2012
@@ -0,0 +1,59 @@
+package org.apache.openejb.arquillian.openejb;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import org.apache.openejb.loader.SystemInstance;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+@RunWith(Arquillian.class)
+public class SimpleArquillianStandaloneTest {
+    @Inject
+    private ABean bean;
+
+    @Inject
+    private AnEJB ejbFromCdiAnnotation;
+
+    @EJB
+    private AnEJB ejbFromEjbAnnotation;
+
+    @Resource
+    private DataSource defaultDs;
+
+    @Deployment
+    public static JavaArchive archive() {
+        return ShrinkWrap.create(JavaArchive.class, SimpleArquillianStandaloneTest.class.getSimpleName().concat(".jar"))
+                    .addClass(ABean.class)
+                    .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("ejb-jar.xml"))
+                    .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
+    }
+
+    @Test
+    public void checkItIsStarted() {
+        assertTrue(SystemInstance.isInitialized());
+    }
+
+    @Test
+    public void checkInjection() {
+        assertNotNull(bean);
+        assertNotNull(ejbFromCdiAnnotation);
+        assertNotNull(ejbFromEjbAnnotation);
+        assertNotNull(defaultDs);
+    }
+
+    public static class ABean {}
+
+    @Singleton public static class AnEJB {}
+}

Added: openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/arquillian.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/arquillian.xml?rev=1330596&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/arquillian.xml (added)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-openejb-container/src/test/resources/arquillian.xml Wed Apr 25 23:10:49 2012
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+-->
+<arquillian
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd" />

Modified: openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-embedded/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-embedded/pom.xml?rev=1330596&r1=1330595&r2=1330596&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-embedded/pom.xml (original)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-embedded/pom.xml Wed Apr 25 23:10:49 2012
@@ -109,7 +109,7 @@
     <dependency>
       <groupId>org.apache.openejb</groupId>
       <artifactId>javaee-api</artifactId>
-      <version>6.0-1</version>
+      <version>${javaee-api.version}</version>
       <type>jar</type>
     </dependency>
 

Modified: openejb/trunk/openejb/arquillian-tomee/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/pom.xml?rev=1330596&r1=1330595&r2=1330596&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/pom.xml (original)
+++ openejb/trunk/openejb/arquillian-tomee/pom.xml Wed Apr 25 23:10:49 2012
@@ -48,5 +48,6 @@
     <module>arquillian-tomee-tests</module>
     <module>arquillian-tomee-moviefun-example</module>
     <module>ziplock</module>
+    <module>arquillian-openejb-container</module>
   </modules>
 </project>

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1330596&r1=1330595&r2=1330596&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java Wed Apr 25 23:10:49 2012
@@ -223,7 +223,7 @@ public class DeployerEjb implements Depl
             config = null;
         }
         if (config == null || !config.getParentFile().exists()) {
-            LOGGER.error("can't save the added app because the conf folder doesn't exist, it will not be present next time you'll start");
+            LOGGER.info("can't save the added app because the conf folder doesn't exist, it will not be present next time you'll start");
             return;
         }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=1330596&r1=1330595&r2=1330596&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java Wed Apr 25 23:10:49 2012
@@ -564,7 +564,11 @@ public class EjbJarInfoBuilder {
         } else if (s.getSessionType() == SessionType.MANAGED) {
             bean = new ManagedBeanInfo();
             ManagedBeanInfo managed = ((ManagedBeanInfo) bean);
-            managed.hidden = ((ManagedBean) s).isHidden();
+            if (s instanceof ManagedBean) { // this way we support managed beans in ejb-jar.xml (not in the spec but can be useful)
+                managed.hidden = ((ManagedBean) s).isHidden();
+            } else {
+                managed.hidden = true;
+            }
 
             copyCallbacks(s.getPostActivate(), managed.postActivate);
             copyCallbacks(s.getPrePassivate(), managed.prePassivate);