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: <[email protected]> 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: [email protected] 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"; + } + } +}
