Author: rmannibucau Date: Tue May 7 08:08:42 2013 New Revision: 1479800 URL: http://svn.apache.org/r1479800 Log: OPENEJB-2019 @ArquillianResource URL in embedded adapter
Added: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianResourceURLTest.java - copied, changed from r1479469, tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianAndMockitoTest.java Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/pom.xml tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/pom.xml URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/pom.xml?rev=1479800&r1=1479799&r2=1479800&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/pom.xml (original) +++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/pom.xml Tue May 7 08:08:42 2013 @@ -113,6 +113,20 @@ <version>1.1.1</version> <scope>provided</scope> </dependency> + + <dependency> <!-- shouldn't be a compile/runtime dependency --> + <groupId>org.apache.openejb</groupId> + <artifactId>openejb-server</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.apache.openejb</groupId> + <artifactId>openejb-cxf-rs</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> </dependencies> <build> Modified: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java?rev=1479800&r1=1479799&r2=1479800&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java (original) +++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java Tue May 7 08:08:42 2013 @@ -21,6 +21,7 @@ import org.apache.openejb.OpenEJB; import org.apache.openejb.OpenEJBRuntimeException; import org.apache.openejb.OpenEjbContainer; import org.apache.openejb.arquillian.common.ArquillianUtil; +import org.apache.openejb.arquillian.openejb.server.ServiceManagers; import org.apache.openejb.assembler.classic.AppInfo; import org.apache.openejb.assembler.classic.Assembler; import org.apache.openejb.assembler.classic.OpenEjbConfigurationFactory; @@ -32,6 +33,10 @@ import org.apache.openejb.core.LocalInit import org.apache.openejb.core.LocalInitialContextFactory; import org.apache.openejb.loader.IO; import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.server.ServerService; +import org.apache.openejb.server.SimpleServiceManager; +import org.apache.openejb.util.ServiceManagerProxy; +import org.apache.openejb.util.reflection.Reflections; import org.apache.openejb.web.LightweightWebAppBuilder; import org.apache.webbeans.web.lifecycle.test.MockHttpSession; import org.apache.webbeans.web.lifecycle.test.MockServletContext; @@ -39,7 +44,9 @@ import org.jboss.arquillian.container.sp 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.HTTPContext; import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData; +import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet; import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped; import org.jboss.arquillian.core.api.Instance; import org.jboss.arquillian.core.api.InstanceProducer; @@ -204,6 +211,13 @@ public class OpenEJBDeployableContainer throw new DeploymentException("can't deploy " + archive.getName(), e); } + // if service manager is started allow @ArquillianResource URL injection + if (PROPERTIES.containsKey(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE)) { + final ProtocolMetaData metaData = ServiceManagers.protocolMetaData(appInfoProducer.get()); + if (metaData != null) { + return metaData; + } + } return new ProtocolMetaData(); } Added: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java?rev=1479800&view=auto ============================================================================== --- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java (added) +++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/server/ServiceManagers.java Tue May 7 08:08:42 2013 @@ -0,0 +1,46 @@ +/** + * 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. + */ +package org.apache.openejb.arquillian.openejb.server; + +import org.apache.openejb.assembler.classic.AppInfo; +import org.apache.openejb.server.ServerService; +import org.apache.openejb.server.SimpleServiceManager; +import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext; +import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData; +import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet; + +// only here to not trigger any loadClass of openejb-server if not mandatory +public final class ServiceManagers { + private ServiceManagers() { + // no-op + } + + public static ProtocolMetaData protocolMetaData(final AppInfo info) { + final org.apache.openejb.server.ServiceManager smp = org.apache.openejb.server.ServiceManager.get(); + if (smp != null && SimpleServiceManager.class.isInstance(smp)) { + final ServerService[] daemons = SimpleServiceManager.class.cast(smp).getDaemons(); + for (final ServerService ss : daemons) { + if ("httpejbd".equals(ss.getName())) { + final HTTPContext httpContext = new HTTPContext(ss.getIP(), ss.getPort()); + httpContext.add(new Servlet("ArquillianServletRunner", info.appId)); + return new ProtocolMetaData().addContext(httpContext); + } + } + } + return null; + } +} Copied: tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianResourceURLTest.java (from r1479469, tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianAndMockitoTest.java) URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianResourceURLTest.java?p2=tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianResourceURLTest.java&p1=tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianAndMockitoTest.java&r1=1479469&r2=1479800&rev=1479800&view=diff ============================================================================== --- tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianAndMockitoTest.java (original) +++ tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/ArquillianResourceURLTest.java Tue May 7 08:08:42 2013 @@ -18,49 +18,33 @@ package org.apache.openejb.arquillian.op 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.ArchivePaths; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import javax.enterprise.inject.Produces; -import javax.inject.Inject; +import java.net.URL; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @RunWith(Arquillian.class) -public class ArquillianAndMockitoTest { - @Inject - private AFooBean bean; - - @Mock @Produces - private static AnInterface mock; - - @Deployment - public static JavaArchive archive() { - return ShrinkWrap.create(JavaArchive.class, ArquillianAndMockitoTest.class.getSimpleName().concat(".jar")) - .addClasses(AnInterface.class, AFooBean.class) +public class ArquillianResourceURLTest { + @Deployment(testable = false) + public static WebArchive archive() { + return ShrinkWrap.create(WebArchive.class, ArquillianResourceURLTest.class.getSimpleName().concat(".war")) .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")); } + @ArquillianResource + private URL url; + @Test public void mockWorks() { - assertNotNull(bean); - assertNotNull(mock); - assertNotNull(bean.get()); - } - - public static interface AnInterface {} - - public static class AFooBean { - @Inject - private AnInterface mock; - - public AnInterface get() { - return mock; - } + assertNotNull(url); + assertEquals(4204, url.getPort()); } }