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 2015/05/30 08:11:25 UTC

svn commit: r1682580 - in /tomee/sandbox/arquillian-tomee-catalina: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tomee/ src/main/java/org/apache/tomee/catalina/ src/main/resources/ src/main/reso...

Author: rmannibucau
Date: Sat May 30 06:11:24 2015
New Revision: 1682580

URL: http://svn.apache.org/r1682580
Log:
adding to sandbox arquillian-tomee-catalina adapter (PoC)

Added:
    tomee/sandbox/arquillian-tomee-catalina/
    tomee/sandbox/arquillian-tomee-catalina/pom.xml
    tomee/sandbox/arquillian-tomee-catalina/src/
    tomee/sandbox/arquillian-tomee-catalina/src/main/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
    tomee/sandbox/arquillian-tomee-catalina/src/test/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java

Added: tomee/sandbox/arquillian-tomee-catalina/pom.xml
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/pom.xml?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/pom.xml (added)
+++ tomee/sandbox/arquillian-tomee-catalina/pom.xml Sat May 30 06:11:24 2015
@@ -0,0 +1,174 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+<!--
+
+ENSURE TOMEE MASTER IS BUILT LOCALLY BEFORE USING THIS MODULE
+
+IT IS DESIGNED TO BE ADDED TO TOMEE WITH TOMEE/ AS PARENT (removing version from here)
+
+-->
+
+  <groupId>org.apache.tomee</groupId>
+  <artifactId>arquillan-tomee-catalina</artifactId>
+  <version>7.0.0-SNAPSHOT</version>
+
+  <properties>
+    <arquillian.version>1.1.8.Final</arquillian.version>
+    <tomcat.version>8.0.23</tomcat.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>7.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-container-spi</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.protocol</groupId>
+      <artifactId>arquillian-protocol-servlet</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jdbc</artifactId>
+      <version>${tomcat.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-dbcp</artifactId>
+      <version>${tomcat.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-annotations-api</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina-ha</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-coyote</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jasper</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.eclipse.jdt.core.compiler</groupId>
+          <artifactId>ecj</artifactId>
+        </exclusion>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jasper-el</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jdt.core.compiler</groupId>
+      <artifactId>ecj</artifactId>
+      <version>4.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>tomee-webapp</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>arquillian-tomee-common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>arquillian-openejb-transaction-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.1</version>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java Sat May 30 06:11:24 2015
@@ -0,0 +1,45 @@
+package org.apache.tomee.catalina;
+
+import org.apache.openejb.arquillian.common.Prefixes;
+import org.apache.openejb.arquillian.common.TomEEConfiguration;
+
+// TODO: create in tomee-common a lighter TomEEConfiguration with only the support set of fields
+@Prefixes({"tomee", "tomee.catalina"})
+public class CatalinaConfiguration extends TomEEConfiguration {
+    private boolean simpleLog = true;
+    private String conf;
+    private String lib;
+    private String bin;
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
+    public String getLib() {
+        return lib;
+    }
+
+    public void setLib(final String lib) {
+        this.lib = lib;
+    }
+
+    public String getBin() {
+        return bin;
+    }
+
+    public void setBin(final String bin) {
+        this.bin = bin;
+    }
+
+    public boolean isSimpleLog() {
+        return simpleLog;
+    }
+
+    public void setSimpleLog(final boolean simpleLog) {
+        this.simpleLog = simpleLog;
+    }
+}

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java Sat May 30 06:11:24 2015
@@ -0,0 +1,150 @@
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.startup.Catalina;
+import org.apache.openejb.NoSuchApplicationException;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.UndeployException;
+import org.apache.openejb.arquillian.common.ArquillianFilterRunner;
+import org.apache.openejb.arquillian.common.IO;
+import org.apache.openejb.arquillian.common.Setup;
+import org.apache.openejb.arquillian.common.TestClassDiscoverer;
+import org.apache.openejb.arquillian.common.TomEEContainer;
+import org.apache.openejb.assembler.WebAppDeployer;
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.config.AdditionalBeanDiscoverer;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.JuliLogStreamFactory;
+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.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptor;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Properties;
+import javax.naming.NamingException;
+
+public class CatalinaContainer extends TomEEContainer<CatalinaConfiguration> {
+    private Catalina catalina;
+
+    private Properties originalSystemProps = new Properties();
+
+    @Inject
+    @SuiteScoped
+    private InstanceProducer<ClassLoader> classLoaderInstanceProducer;
+
+    @Override
+    public Class<CatalinaConfiguration> getConfigurationClass() {
+        return CatalinaConfiguration.class;
+    }
+
+    @Override
+    public void setup(final CatalinaConfiguration catalinaConfiguration) {
+        originalSystemProps.putAll(System.getProperties());
+        super.setup(catalinaConfiguration);
+        if (configuration.isSimpleLog()) {
+            setSimpleLog();
+        }
+    }
+
+    @Override
+    public void start() throws LifecycleException {
+        catalina = new ExtendedCatalina(configuration);
+
+        Properties properties;
+        try {
+            properties = IO.readProperties(new ByteArrayInputStream(configuration.systemProperties().getBytes()), new Properties());
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+        if (!properties.containsKey("openejb.system.apps")) { // we are in embedded mode actually so no need to loose time
+            properties.setProperty("openejb.system.apps", "false");
+        }
+        System.getProperties().putAll(properties); // better way to do it?
+
+        final File dir = new File(configuration.getDir());
+        Setup.synchronizeFolder(dir, configuration.getConf(), "conf");
+        Setup.synchronizeFolder(dir, configuration.getBin(), "bin");
+        Setup.synchronizeFolder(dir, configuration.getLib(), "lib");
+        try {
+            Setup.configureServerXml(dir, configuration);
+        } catch (final IOException e) {
+            throw new LifecycleException(e.getMessage(), e);
+        }
+
+        catalina.start();
+        SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class, new TestClassDiscoverer());
+        SystemInstance.get().setProperty(
+                "org.apache.openejb.servlet.filters",
+                ArquillianFilterRunner.class.getName() + "=/ArquillianServletRunner");
+    }
+
+    @Override
+    public void stop() throws LifecycleException {
+        catalina.stop();
+        System.getProperties().clear();
+        System.getProperties().putAll(originalSystemProps);
+    }
+
+    @Override
+    public ProtocolDescription getDefaultProtocol() {
+        return new ProtocolDescription("Local");
+    }
+
+    @Override
+    protected AppInfo doDeploy(final Archive<?> archive, final File file) throws OpenEJBException, NamingException, IOException {
+        final AppInfo appInfo;
+        if (WebAppDeployer.Helper.isWebApp(file)) {
+            appInfo = SystemInstance.get().getComponent(WebAppDeployer.class)
+                    .deploy("localhost", archive.getName(), file);
+        } else {
+            try {
+                appInfo = SystemInstance.get().getComponent(ConfigurationFactory.class)
+                        .configureApplication(file);
+                SystemInstance.get().getComponent(Assembler.class).createApplication(appInfo);
+            } catch (final OpenEJBException | NamingException | IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+        classLoaderInstanceProducer.set(SystemInstance.get().getComponent(ContainerSystem.class).getAppContext(appInfo.appId).getClassLoader());
+        return appInfo;
+    }
+
+    @Override
+    protected void doUndeploy(final DeployedApp deployed) throws UndeployException, NoSuchApplicationException, NamingException {
+        SystemInstance.get().getComponent(Assembler.class).destroyApplication(deployed.path);
+    }
+
+    @Override
+    protected Collection<AppInfo> getDeployedApps() throws NamingException {
+        return SystemInstance.get().getComponent(Assembler.class).getDeployedApplications();
+    }
+
+    @Override
+    public void deploy(final Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void undeploy(final Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    private void setSimpleLog() {
+        System.setProperty("openejb.jul.forceReload", "true");
+        try {
+            Class.forName(JuliLogStreamFactory.class.getName(), true, CatalinaContainer.class.getClassLoader());
+        } catch (final ClassNotFoundException e) {
+            // no-op
+        }
+    }
+}

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java Sat May 30 06:11:24 2015
@@ -0,0 +1,29 @@
+package org.apache.tomee.catalina;
+
+import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.RemoteInitialContextObserver;
+import org.apache.openejb.arquillian.common.TestObserver;
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
+import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
+import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
+import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.core.spi.LoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
+import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
+import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
+
+public class CatalinaExtension implements LoadableExtension {
+    @Override
+    public void register(final ExtensionBuilder extensionBuilder) {
+        if (ArquillianUtil.isCurrentAdapter("tomee-catalina")) {
+            extensionBuilder.service(DeployableContainer.class, CatalinaContainer.class)
+                    .observer(DeploymentExceptionObserver.class)
+                    .observer(RemoteInitialContextObserver.class)
+                    .observer(TestObserver.class)
+                    .service(TestEnricher.class, TomEEInjectionEnricher.class)
+                    .service(TransactionProvider.class, OpenEJBTransactionProvider.class)
+                    .service(ResourceProvider.class, DeploymentExceptionProvider.class);
+        }
+    }
+}

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java Sat May 30 06:11:24 2015
@@ -0,0 +1,53 @@
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.Service;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.startup.Catalina;
+import org.apache.openejb.arquillian.common.Setup;
+
+import java.io.File;
+
+public class ExtendedCatalina extends Catalina {
+    private final CatalinaConfiguration configuration;
+
+    public ExtendedCatalina(final CatalinaConfiguration configuration) {
+        this.configuration = configuration;
+        setAwait(false);
+        setUseShutdownHook(false);
+    }
+
+    @Override
+    protected void initStreams() { // here server is built and envrt is not yet set so good place to tweak the server
+        fixConfig();
+        super.initStreams();
+    }
+
+    private void fixConfig() {
+        if (server.getPort() > 0) {
+            server.setPort(-1);
+        }
+        for (final Service s : server.findServices()) {
+            for (final Connector c : s.findConnectors()) {
+                if (c.getProtocol().contains("HTTP")) {
+                    if (!c.getSecure()) {
+                        c.setPort(configuration.getHttpPort());
+                    } else {
+                        c.setPort(configuration.getHttpsPort());
+                    }
+                }
+            }
+        }
+        final File dir = new File(configuration.getDir());
+        server.setCatalinaBase(dir);
+        server.setCatalinaHome(dir);
+    }
+
+    @Override
+    public void load() { // ensure we find a server.xml anyway
+        if (!configFile().exists()) {
+            setConfigFile(configuration.getServerXml() == null ?
+                    "arquillian-tomee-catalina/server.xml" : configuration.getServerXml());
+        }
+        super.load();
+    }
+}

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension Sat May 30 06:11:24 2015
@@ -0,0 +1 @@
+org.apache.tomee.catalina.CatalinaExtension

Added: tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml Sat May 30 06:11:24 2015
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  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.
+-->
+<Server port="-1">
+  <Listener className="org.apache.tomee.catalina.ServerListener" />
+  <Service name="Catalina">
+    <Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" xpoweredBy="false" server="Apache TomEE" />
+    <Engine name="Catalina" defaultHost="localhost">
+      <Host name="localhost"  appBase="webapps" />
+    </Engine>
+  </Service>
+</Server>

Added: tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java Sat May 30 06:11:24 2015
@@ -0,0 +1,34 @@
+package org.apache.tomee.catalina;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(Arquillian.class)
+public class ClientTest {
+    @Deployment(testable = false)
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class, "app.war")
+                .addAsWebResource(EmptyAsset.INSTANCE, "empty.txt");
+    }
+
+    @ArquillianResource
+    private URL url;
+
+    @Test
+    public void run() {
+        assertNotNull(url);
+        assertEquals("/app/", url.getPath());
+    }
+}

Added: tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java (added)
+++ tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java Sat May 30 06:11:24 2015
@@ -0,0 +1,47 @@
+package org.apache.tomee.catalina;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+@RunWith(Arquillian.class)
+public class ServerInjectionTest {
+    @Deployment
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class, "app.war")
+                .addClass(TheTest.class)
+                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Inject
+    private TheTest test;
+
+    @Inject
+    private BeanManager bm;
+
+    @Test
+    public void run() {
+        final Object testRef = bm.getReference(bm.resolve(bm.getBeans(TheTest.class)), TheTest.class, bm.createCreationalContext(null));
+        assertSame(test, testRef); // assertEquals fails cause proxy != instance and that's what does assertEquals
+        assertEquals("the", test.ok());
+    }
+
+    @ApplicationScoped
+    public static class TheTest {
+        public String ok() {
+            return "the";
+        }
+    }
+}



Fwd: svn commit: r1682580 - in /tomee/sandbox/arquillian-tomee-catalina: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tomee/ src/main/java/org/apache/tomee/catalina/ src/main/resources/ src/main/reso...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi guys,

Speaking with David he said we could do an arquillian adapter using
Catalina instead of Tomcat (our TomEE Embedded). Played a bit with this
idea in
http://svn.apache.org/repos/asf/tomee/sandbox/arquillian-tomee-catalina/
(it needs tomee master to be built before) and got to the conclusion it
doesn't worth it much because it is super close to the tomee-embedded we
have (config would be more or less the same or can be at least and no
classloader isolation so the common issues of this kind of setup).

wdyt? wrong good idea or good wrong idea?

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>

---------- Forwarded message ----------
From: <rm...@apache.org>
Date: 2015-05-30 8:11 GMT+02:00
Subject: svn commit: r1682580 - in
/tomee/sandbox/arquillian-tomee-catalina: ./ src/ src/main/ src/main/java/
src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/tomee/ src/main/java/org/apache/tomee/catalina/
src/main/resources/ src/main/reso...
To: commits@tomee.apache.org


Author: rmannibucau
Date: Sat May 30 06:11:24 2015
New Revision: 1682580

URL: http://svn.apache.org/r1682580
Log:
adding to sandbox arquillian-tomee-catalina adapter (PoC)

Added:
    tomee/sandbox/arquillian-tomee-catalina/
    tomee/sandbox/arquillian-tomee-catalina/pom.xml
    tomee/sandbox/arquillian-tomee-catalina/src/
    tomee/sandbox/arquillian-tomee-catalina/src/main/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/
    tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/

tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/

tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java

tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java

tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java

tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/
    tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/

tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/

tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension

tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/

tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
    tomee/sandbox/arquillian-tomee-catalina/src/test/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/
    tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/

tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/

tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java

tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java

Added: tomee/sandbox/arquillian-tomee-catalina/pom.xml
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/pom.xml?rev=1682580&view=auto
==============================================================================
--- tomee/sandbox/arquillian-tomee-catalina/pom.xml (added)
+++ tomee/sandbox/arquillian-tomee-catalina/pom.xml Sat May 30 06:11:24 2015
@@ -0,0 +1,174 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+<!--
+
+ENSURE TOMEE MASTER IS BUILT LOCALLY BEFORE USING THIS MODULE
+
+IT IS DESIGNED TO BE ADDED TO TOMEE WITH TOMEE/ AS PARENT (removing
version from here)
+
+-->
+
+  <groupId>org.apache.tomee</groupId>
+  <artifactId>arquillan-tomee-catalina</artifactId>
+  <version>7.0.0-SNAPSHOT</version>
+
+  <properties>
+    <arquillian.version>1.1.8.Final</arquillian.version>
+    <tomcat.version>8.0.23</tomcat.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>7.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-container-spi</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.protocol</groupId>
+      <artifactId>arquillian-protocol-servlet</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jdbc</artifactId>
+      <version>${tomcat.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-dbcp</artifactId>
+      <version>${tomcat.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-annotations-api</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina-ha</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-coyote</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jasper</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.eclipse.jdt.core.compiler</groupId>
+          <artifactId>ecj</artifactId>
+        </exclusion>
+        <exclusion>
+          <artifactId>tomcat-juli</artifactId>
+          <groupId>org.apache.tomcat</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jasper-el</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jdt.core.compiler</groupId>
+      <artifactId>ecj</artifactId>
+      <version>4.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>tomee-webapp</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>arquillian-tomee-common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>arquillian-openejb-transaction-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.1</version>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaConfiguration.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,45 @@
+package org.apache.tomee.catalina;
+
+import org.apache.openejb.arquillian.common.Prefixes;
+import org.apache.openejb.arquillian.common.TomEEConfiguration;
+
+// TODO: create in tomee-common a lighter TomEEConfiguration with only the
support set of fields
+@Prefixes({"tomee", "tomee.catalina"})
+public class CatalinaConfiguration extends TomEEConfiguration {
+    private boolean simpleLog = true;
+    private String conf;
+    private String lib;
+    private String bin;
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
+    public String getLib() {
+        return lib;
+    }
+
+    public void setLib(final String lib) {
+        this.lib = lib;
+    }
+
+    public String getBin() {
+        return bin;
+    }
+
+    public void setBin(final String bin) {
+        this.bin = bin;
+    }
+
+    public boolean isSimpleLog() {
+        return simpleLog;
+    }
+
+    public void setSimpleLog(final boolean simpleLog) {
+        this.simpleLog = simpleLog;
+    }
+}

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaContainer.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,150 @@
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.startup.Catalina;
+import org.apache.openejb.NoSuchApplicationException;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.UndeployException;
+import org.apache.openejb.arquillian.common.ArquillianFilterRunner;
+import org.apache.openejb.arquillian.common.IO;
+import org.apache.openejb.arquillian.common.Setup;
+import org.apache.openejb.arquillian.common.TestClassDiscoverer;
+import org.apache.openejb.arquillian.common.TomEEContainer;
+import org.apache.openejb.assembler.WebAppDeployer;
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.config.AdditionalBeanDiscoverer;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.JuliLogStreamFactory;
+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.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptor;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Properties;
+import javax.naming.NamingException;
+
+public class CatalinaContainer extends
TomEEContainer<CatalinaConfiguration> {
+    private Catalina catalina;
+
+    private Properties originalSystemProps = new Properties();
+
+    @Inject
+    @SuiteScoped
+    private InstanceProducer<ClassLoader> classLoaderInstanceProducer;
+
+    @Override
+    public Class<CatalinaConfiguration> getConfigurationClass() {
+        return CatalinaConfiguration.class;
+    }
+
+    @Override
+    public void setup(final CatalinaConfiguration catalinaConfiguration) {
+        originalSystemProps.putAll(System.getProperties());
+        super.setup(catalinaConfiguration);
+        if (configuration.isSimpleLog()) {
+            setSimpleLog();
+        }
+    }
+
+    @Override
+    public void start() throws LifecycleException {
+        catalina = new ExtendedCatalina(configuration);
+
+        Properties properties;
+        try {
+            properties = IO.readProperties(new
ByteArrayInputStream(configuration.systemProperties().getBytes()), new
Properties());
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+        if (!properties.containsKey("openejb.system.apps")) { // we are in
embedded mode actually so no need to loose time
+            properties.setProperty("openejb.system.apps", "false");
+        }
+        System.getProperties().putAll(properties); // better way to do it?
+
+        final File dir = new File(configuration.getDir());
+        Setup.synchronizeFolder(dir, configuration.getConf(), "conf");
+        Setup.synchronizeFolder(dir, configuration.getBin(), "bin");
+        Setup.synchronizeFolder(dir, configuration.getLib(), "lib");
+        try {
+            Setup.configureServerXml(dir, configuration);
+        } catch (final IOException e) {
+            throw new LifecycleException(e.getMessage(), e);
+        }
+
+        catalina.start();
+        SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class,
new TestClassDiscoverer());
+        SystemInstance.get().setProperty(
+                "org.apache.openejb.servlet.filters",
+                ArquillianFilterRunner.class.getName() +
"=/ArquillianServletRunner");
+    }
+
+    @Override
+    public void stop() throws LifecycleException {
+        catalina.stop();
+        System.getProperties().clear();
+        System.getProperties().putAll(originalSystemProps);
+    }
+
+    @Override
+    public ProtocolDescription getDefaultProtocol() {
+        return new ProtocolDescription("Local");
+    }
+
+    @Override
+    protected AppInfo doDeploy(final Archive<?> archive, final File file)
throws OpenEJBException, NamingException, IOException {
+        final AppInfo appInfo;
+        if (WebAppDeployer.Helper.isWebApp(file)) {
+            appInfo =
SystemInstance.get().getComponent(WebAppDeployer.class)
+                    .deploy("localhost", archive.getName(), file);
+        } else {
+            try {
+                appInfo =
SystemInstance.get().getComponent(ConfigurationFactory.class)
+                        .configureApplication(file);
+
SystemInstance.get().getComponent(Assembler.class).createApplication(appInfo);
+            } catch (final OpenEJBException | NamingException |
IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+
classLoaderInstanceProducer.set(SystemInstance.get().getComponent(ContainerSystem.class).getAppContext(appInfo.appId).getClassLoader());
+        return appInfo;
+    }
+
+    @Override
+    protected void doUndeploy(final DeployedApp deployed) throws
UndeployException, NoSuchApplicationException, NamingException {
+
SystemInstance.get().getComponent(Assembler.class).destroyApplication(deployed.path);
+    }
+
+    @Override
+    protected Collection<AppInfo> getDeployedApps() throws NamingException
{
+        return
SystemInstance.get().getComponent(Assembler.class).getDeployedApplications();
+    }
+
+    @Override
+    public void deploy(final Descriptor descriptor) throws
DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void undeploy(final Descriptor descriptor) throws
DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    private void setSimpleLog() {
+        System.setProperty("openejb.jul.forceReload", "true");
+        try {
+            Class.forName(JuliLogStreamFactory.class.getName(), true,
CatalinaContainer.class.getClassLoader());
+        } catch (final ClassNotFoundException e) {
+            // no-op
+        }
+    }
+}

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/CatalinaExtension.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,29 @@
+package org.apache.tomee.catalina;
+
+import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.RemoteInitialContextObserver;
+import org.apache.openejb.arquillian.common.TestObserver;
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
+import
org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
+import
org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
+import
org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
+import
org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.core.spi.LoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
+import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
+import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
+
+public class CatalinaExtension implements LoadableExtension {
+    @Override
+    public void register(final ExtensionBuilder extensionBuilder) {
+        if (ArquillianUtil.isCurrentAdapter("tomee-catalina")) {
+            extensionBuilder.service(DeployableContainer.class,
CatalinaContainer.class)
+                    .observer(DeploymentExceptionObserver.class)
+                    .observer(RemoteInitialContextObserver.class)
+                    .observer(TestObserver.class)
+                    .service(TestEnricher.class,
TomEEInjectionEnricher.class)
+                    .service(TransactionProvider.class,
OpenEJBTransactionProvider.class)
+                    .service(ResourceProvider.class,
DeploymentExceptionProvider.class);
+        }
+    }
+}

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/java/org/apache/tomee/catalina/ExtendedCatalina.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,53 @@
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.Service;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.startup.Catalina;
+import org.apache.openejb.arquillian.common.Setup;
+
+import java.io.File;
+
+public class ExtendedCatalina extends Catalina {
+    private final CatalinaConfiguration configuration;
+
+    public ExtendedCatalina(final CatalinaConfiguration configuration) {
+        this.configuration = configuration;
+        setAwait(false);
+        setUseShutdownHook(false);
+    }
+
+    @Override
+    protected void initStreams() { // here server is built and envrt is
not yet set so good place to tweak the server
+        fixConfig();
+        super.initStreams();
+    }
+
+    private void fixConfig() {
+        if (server.getPort() > 0) {
+            server.setPort(-1);
+        }
+        for (final Service s : server.findServices()) {
+            for (final Connector c : s.findConnectors()) {
+                if (c.getProtocol().contains("HTTP")) {
+                    if (!c.getSecure()) {
+                        c.setPort(configuration.getHttpPort());
+                    } else {
+                        c.setPort(configuration.getHttpsPort());
+                    }
+                }
+            }
+        }
+        final File dir = new File(configuration.getDir());
+        server.setCatalinaBase(dir);
+        server.setCatalinaHome(dir);
+    }
+
+    @Override
+    public void load() { // ensure we find a server.xml anyway
+        if (!configFile().exists()) {
+            setConfigFile(configuration.getServerXml() == null ?
+                    "arquillian-tomee-catalina/server.xml" :
configuration.getServerXml());
+        }
+        super.load();
+    }
+}

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
Sat May 30 06:11:24 2015
@@ -0,0 +1 @@
+org.apache.tomee.catalina.CatalinaExtension

Added:
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/main/resources/arquillian-tomee-catalina/server.xml
Sat May 30 06:11:24 2015
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  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.
+-->
+<Server port="-1">
+  <Listener className="org.apache.tomee.catalina.ServerListener" />
+  <Service name="Catalina">
+    <Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" xpoweredBy="false" server="Apache
TomEE" />
+    <Engine name="Catalina" defaultHost="localhost">
+      <Host name="localhost"  appBase="webapps" />
+    </Engine>
+  </Service>
+</Server>

Added:
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ClientTest.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,34 @@
+package org.apache.tomee.catalina;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(Arquillian.class)
+public class ClientTest {
+    @Deployment(testable = false)
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class, "app.war")
+                .addAsWebResource(EmptyAsset.INSTANCE, "empty.txt");
+    }
+
+    @ArquillianResource
+    private URL url;
+
+    @Test
+    public void run() {
+        assertNotNull(url);
+        assertEquals("/app/", url.getPath());
+    }
+}

Added:
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java
URL:
http://svn.apache.org/viewvc/tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java?rev=1682580&view=auto
==============================================================================
---
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java
(added)
+++
tomee/sandbox/arquillian-tomee-catalina/src/test/java/org/apache/tomee/catalina/ServerInjectionTest.java
Sat May 30 06:11:24 2015
@@ -0,0 +1,47 @@
+package org.apache.tomee.catalina;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+@RunWith(Arquillian.class)
+public class ServerInjectionTest {
+    @Deployment
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class, "app.war")
+                .addClass(TheTest.class)
+                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Inject
+    private TheTest test;
+
+    @Inject
+    private BeanManager bm;
+
+    @Test
+    public void run() {
+        final Object testRef =
bm.getReference(bm.resolve(bm.getBeans(TheTest.class)), TheTest.class,
bm.createCreationalContext(null));
+        assertSame(test, testRef); // assertEquals fails cause proxy !=
instance and that's what does assertEquals
+        assertEquals("the", test.ok());
+    }
+
+    @ApplicationScoped
+    public static class TheTest {
+        public String ok() {
+            return "the";
+        }
+    }
+}