Author: dblevins Date: Mon Nov 5 11:41:58 2012 New Revision: 1405750 URL: http://svn.apache.org/viewvc?rev=1405750&view=rev Log: TOMEE-523, TOMEE-521, TOMEE-520
Added: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestEjb.java - copied, changed from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestEjb.java openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestServlet.java - copied, changed from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestServlet.java openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/UnpackTest.java - copied, changed from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/ openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/EarModuleNamesTest.java Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java Copied: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestEjb.java (from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestEjb.java) URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestEjb.java?p2=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestEjb.java&p1=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestEjb.java&r1=1405592&r2=1405750&rev=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestEjb.java (original) +++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestEjb.java Mon Nov 5 11:41:58 2012 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openejb.arquillian; +package org.apache.openejb.arquillian.unpack; import javax.ejb.Stateless; Copied: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestServlet.java (from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestServlet.java) URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestServlet.java?p2=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestServlet.java&p1=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestServlet.java&r1=1405592&r2=1405750&rev=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TestServlet.java (original) +++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/TestServlet.java Mon Nov 5 11:41:58 2012 @@ -14,15 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openejb.arquillian; - -import java.io.IOException; +package org.apache.openejb.arquillian.unpack; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; public class TestServlet extends HttpServlet { Copied: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/UnpackTest.java (from r1405592, openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java) URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/UnpackTest.java?p2=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/UnpackTest.java&p1=openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java&r1=1405592&r2=1405750&rev=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerTest.java (original) +++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/unpack/UnpackTest.java Mon Nov 5 11:41:58 2012 @@ -14,13 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openejb.arquillian; +package org.apache.openejb.arquillian.unpack; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.net.URL; -import javax.ejb.EJB; import junit.framework.Assert; +import org.apache.openejb.arquillian.common.Files; +import org.apache.openejb.loader.JarLocation; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; @@ -31,45 +29,50 @@ import org.jboss.shrinkwrap.descriptor.a import org.junit.Test; import org.junit.runner.RunWith; +import javax.ejb.EJB; +import java.io.File; + @RunWith(Arquillian.class) -public class TomEEContainerTest { +public class UnpackTest extends Assert { @Deployment public static WebArchive createDeployment() { - return ShrinkWrap.create(WebArchive.class, "test.war").addClass(TestServlet.class).addClass(TestEjb.class).addClass(TomEEContainerTest.class) + return ShrinkWrap + .create(WebArchive.class, "unpacktest.war") + .addAsLibraries(JarLocation.jarLocation(Test.class)) + .addClass(TestServlet.class) + .addClass(TestEjb.class) + .addClass(UnpackTest.class) .setWebXML(new StringAsset(Descriptors.create(WebAppDescriptor.class).version("3.0") .createServlet().servletName("servlet").servletClass(TestServlet.class.getName()).up() .createServletMapping().servletName("servlet").urlPattern("/ejb").up() - .exportAsString())); + .exportAsString())); } @EJB private TestEjb ejb; + // This test isn't well implemented because we don't copy + // the war in packed. Just need to do that and then get this + // test to pass legitimately. @Test - public void testEjbIsNotNull() throws Exception { - Assert.assertNotNull(ejb); - } + public void testNotUnpacked() throws Exception { - @Test - public void testShouldBeAbleToAccessServletAndEjb() throws Exception { - // using this hook to get the url since we are deployed in the container and we don't have metadata - // to get the url injected...we probably need 2 deployments for such a test - URL url = new URL("http://127.0.0.1:" + System.getProperty("tomee.httpPort", "10080") + "/test/ejb"); - InputStream is = url.openStream(); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - int bytesRead; - byte[] buffer = new byte[8192]; - while ((bytesRead = is.read(buffer)) > -1) { - os.write(buffer, 0, bytesRead); - } + final String property = System.getProperty("catalina.base"); + assertNotNull(property); + + final File home = new File(property); + final File webapps = new File(home, "webapps"); + final File unpacktest = new File(webapps, "unpacktest"); + + // Catalina home should exist + assertTrue(home.exists()); - is.close(); - os.close(); + // webapps should exist + assertTrue(webapps.exists()); - String output = new String(os.toByteArray(), "UTF-8"); - Assert.assertTrue(output.contains("Hello, OpenEJB")); + // exploded test dir should NOT exist + assertFalse(unpacktest.exists()); } } Added: openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java?rev=1405750&view=auto ============================================================================== --- openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java (added) +++ openejb/trunk/openejb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java Mon Nov 5 11:41:58 2012 @@ -0,0 +1,109 @@ +/* + * 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.tests.ear; + +import org.apache.openejb.loader.JarLocation; +import org.apache.ziplock.IO; +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.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.annotation.PostConstruct; +import javax.ejb.EJB; +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URL; + +/** + * @version $Rev$ $Date$ + */ +@RunWith(Arquillian.class) +public class EarTest { + + @ArquillianResource + private URL url; + + @Deployment(testable = false) + public static EnterpriseArchive createDeployment() { + + final JavaArchive ejbJar = ShrinkWrap.create(JavaArchive.class, "beans.jar"); + ejbJar.addClass(Bean.class); + ejbJar.addClass(EarTest.class); + + final WebArchive webapp = ShrinkWrap.create(WebArchive.class, "green.war").addClass(Hello.class); + System.out.println(webapp.toString(true)); + System.out.println(); + + final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "red.ear").addAsModule(ejbJar).addAsModule(webapp); + ear.addAsLibraries(JarLocation.jarLocation(Test.class)); + + System.out.println(ear.toString(true)); + System.out.println(); + + return ear; + } + + @Test + public void test() throws Exception { + System.out.println(url); + + final URL servlet = new URL(url, "/red/green/blue"); + final String slurp = IO.slurp(servlet); + Assert.assertEquals(Test.class.getName(), slurp); + System.out.println(slurp); + } + + + @Singleton + @Startup + public static class Bean { + + @PostConstruct + private void post() throws InterruptedException { +// Thread.sleep(TimeUnit.MINUTES.toMillis(1)); + } + + public String getMessage() { + return Test.class.getName(); + } + } + + @WebServlet("/blue") + public static class Hello extends HttpServlet { + + @EJB + private Bean bean; + + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.getWriter().print(bean.getMessage()); + } + } +} Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1405750&r1=1405749&r2=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java Mon Nov 5 11:41:58 2012 @@ -377,7 +377,12 @@ class AppInfoBuilder { } webAppInfo.host = webModule.getHost(); - webAppInfo.contextRoot = webModule.getContextRoot(); + + if (!webModule.isStandaloneModule()) { + webAppInfo.contextRoot = appModule.getModuleId() + "/" + webModule.getContextRoot(); + } else { + webAppInfo.contextRoot = webModule.getContextRoot(); + } jndiEncInfoBuilder.build(webApp, webModule.getJarLocation(), webAppInfo.moduleId, webModule.getModuleUri(), webAppInfo.jndiEnc, webAppInfo.jndiEnc); @@ -866,13 +871,7 @@ class AppInfoBuilder { } private static String getClientModuleId(ClientModule clientModule) { - String jarLocation = clientModule.getJarLocation(); - File file = new File(jarLocation); - String name = file.getName(); - if (name.endsWith(".jar") || name.endsWith(".zip")) { - name = name.replaceFirst("....$", ""); - } - return name; + return clientModule.getModuleId(); } Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1405750&r1=1405749&r2=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Mon Nov 5 11:41:58 2012 @@ -47,6 +47,7 @@ import org.apache.openejb.util.Annotatio import org.apache.openejb.util.JarExtractor; import org.apache.openejb.util.LogCategory; import org.apache.openejb.util.Logger; +import org.apache.openejb.util.StringTemplate; import org.apache.openejb.util.URLs; import org.apache.xbean.finder.IAnnotationFinder; import org.apache.xbean.finder.ResourceFinder; @@ -152,7 +153,7 @@ public class DeploymentLoader implements final AppModule appModule; //final Class<? extends DeploymentModule> o = EjbModule.class; - final EjbModule ejbModule = createEjbModule(baseUrl, jarPath, classLoader, null); + final EjbModule ejbModule = createEjbModule(baseUrl, jarPath, classLoader); // wrap the EJB Module with an Application Module appModule = new AppModule(ejbModule); @@ -451,7 +452,7 @@ public class DeploymentLoader implements final File ejbFile = toFile(ejbUrl); final String absolutePath = ejbFile.getAbsolutePath(); - final EjbModule ejbModule = createEjbModule(ejbUrl, absolutePath, appClassLoader, moduleName); + final EjbModule ejbModule = createEjbModule(ejbUrl, absolutePath, appClassLoader); appModule.getEjbModules().add(ejbModule); } catch (OpenEJBException e) { logger.error("Unable to load EJBs from EAR: " + appId + ", module: " + moduleName + ". Exception: " + e.getMessage(), e); @@ -473,7 +474,7 @@ public class DeploymentLoader implements final File clientFile = toFile(clientUrl); final String absolutePath = clientFile.getAbsolutePath(); - final ClientModule clientModule = createClientModule(clientUrl, absolutePath, appClassLoader, moduleName); + final ClientModule clientModule = createClientModule(clientUrl, absolutePath, appClassLoader, null); appModule.getClientModules().add(clientModule); } catch (Exception e) { @@ -505,7 +506,7 @@ public class DeploymentLoader implements for (final String moduleName : webModules.keySet()) { try { final URL warUrl = webModules.get(moduleName); - addWebModule(appModule, warUrl, appClassLoader, webContextRoots.get(moduleName), moduleName); + addWebModule(appModule, warUrl, appClassLoader, webContextRoots.get(moduleName), null); } catch (OpenEJBException e) { logger.error("Unable to load WAR: " + appId + ", module: " + moduleName + ". Exception: " + e.getMessage(), e); } @@ -522,6 +523,10 @@ public class DeploymentLoader implements DeploymentsResolver.loadFromClasspath(base, filteredUrls, appModule.getClassLoader()); addPersistenceUnits(appModule, filteredUrls.toArray(new URL[filteredUrls.size()])); + for (DeploymentModule module : appModule.getDeploymentModule()) { + module.setStandaloneModule(false); + } + return appModule; } catch (OpenEJBException e) { @@ -577,7 +582,7 @@ public class DeploymentLoader implements return clientModule; } - protected EjbModule createEjbModule(final URL baseUrl, final String jarPath, final ClassLoader classLoader, final String moduleId) throws OpenEJBException { + protected EjbModule createEjbModule(final URL baseUrl, final String jarPath, final ClassLoader classLoader) throws OpenEJBException { // read the ejb-jar.xml file Map<String, URL> descriptors; if (baseUrl != null) { @@ -601,7 +606,7 @@ public class DeploymentLoader implements } // create the EJB Module - final EjbModule ejbModule = new EjbModule(classLoader, moduleId, jarPath, ejbJar, null); + final EjbModule ejbModule = new EjbModule(classLoader, null, jarPath, ejbJar, null); ejbModule.getAltDDs().putAll(descriptors); if (jarPath != null) { ejbModule.getWatchedResources().add(jarPath); Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/EarModuleNamesTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/EarModuleNamesTest.java?rev=1405750&view=auto ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/EarModuleNamesTest.java (added) +++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/EarModuleNamesTest.java Mon Nov 5 11:41:58 2012 @@ -0,0 +1,208 @@ +/* + * 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.config; + +import junit.framework.TestCase; +import org.apache.openejb.assembler.classic.AppInfo; +import org.apache.openejb.assembler.classic.Assembler; +import org.apache.openejb.loader.Files; +import org.apache.openejb.util.Archives; + +import javax.ejb.Singleton; +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @version $Rev$ $Date$ + */ +public class EarModuleNamesTest extends TestCase { + + public void testDefaultIdEjbJar() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + + Map<String, Object> contents = new HashMap<String, Object>(); + contents.put("orange.jar", Archives.jarArchive(Orange.class)); + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.ejbJars.size(), 1); + assertEquals("orange", appInfo.ejbJars.get(0).moduleId); + } + + public void testDefaultIdWebapp() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + + Map<String, Object> contents = new HashMap<String, Object>(); + contents.put("orange.war", Archives.jarArchive(Orange.class)); + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.ejbJars.size(), 1); + assertEquals("orange", appInfo.webApps.get(0).moduleId); + } + + public void testModuleNameEjbJar() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + Map<String, Object> contents = new HashMap<String, Object>(); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("META-INF/ejb-jar.xml", "<ejb-jar><module-name>orange</module-name></ejb-jar>"); + final File ejbJar = Archives.jarArchive(metaInf, "orange", Orange.class); + contents.put("green.jar", ejbJar); + + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.ejbJars.size(), 1); + assertEquals("orange", appInfo.ejbJars.get(0).moduleId); + } + + public void testModuleNameAppClient() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + Map<String, Object> contents = new HashMap<String, Object>(); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("META-INF/application-client.xml", "<application-client><module-name>orange</module-name></application-client>"); + final File ejbJar = Archives.jarArchive(metaInf, "orange", Orange.class); + contents.put("green.jar", ejbJar); + + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.clients.size(), 1); + assertEquals("orange", appInfo.clients.get(0).moduleId); + } + + public void testModuleNameWebapp() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + Map<String, Object> contents = new HashMap<String, Object>(); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("WEB-INF/web.xml", "<webapp><module-name>orange</module-name></webapp>"); + final File ejbJar = Archives.jarArchive(metaInf, "orange", Orange.class); + contents.put("green.war", ejbJar); + + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.webApps.size(), 1); + assertEquals("orange", appInfo.webApps.get(0).moduleId); + } + + public void testIdEjbJar() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("META-INF/ejb-jar.xml", "<ejb-jar id=\"orange\" />"); + final File ejbJar = Archives.jarArchive(metaInf, "orange", Orange.class); + + Map<String, Object> contents = new HashMap<String, Object>(); + contents.put("green.jar", ejbJar); + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.ejbJars.size(), 1); + assertEquals("orange", appInfo.ejbJars.get(0).moduleId); + } + + public void testIdApplicationClient() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("META-INF/application-client.xml", "<application-client id=\"orange\" />"); + final File jar = Archives.jarArchive(metaInf, "orange", Orange.class); + + Map<String, Object> contents = new HashMap<String, Object>(); + contents.put("green.jar", jar); + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.clients.size(), 1); + assertEquals("orange", appInfo.clients.get(0).moduleId); + } + + public void testIdWebapp() throws Exception { + final File appsDir = Files.tmpdir(); + + final Assembler assembler = new Assembler(); + final ConfigurationFactory factory = new ConfigurationFactory(); + + final File ear = new File(appsDir, "colors.ear"); + Map<String, Object> contents = new HashMap<String, Object>(); + + Map<String, Object> metaInf = new HashMap<String, Object>(); + metaInf.put("WEB-INF/web.xml", "<webapp id=\"orange\" />"); + final File ejbJar = Archives.jarArchive(metaInf, "orange", Orange.class); + contents.put("green.war", ejbJar); + + Archives.jarArchive(ear, contents); + + final AppInfo appInfo = factory.configureApplication(ear); + assertEquals(appInfo.webApps.size(), 1); + assertEquals("orange", appInfo.webApps.get(0).moduleId); + } + + + + + @Singleton + public static class Orange { + + } + + @Singleton + public static class Yellow { + + } + +} Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java?rev=1405750&r1=1405749&r2=1405750&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java (original) +++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java Mon Nov 5 11:41:58 2012 @@ -95,20 +95,24 @@ public class Archives { return classpath; } - public static File jarArchive(Class[] classes) throws IOException { + public static File jarArchive(Class... classes) throws IOException { return jarArchive(new HashMap<String, String>(), "temp", classes); } public static File jarArchive(Map<String, ?> entries, String archiveNamePrefix, Class... classes) throws IOException { - ClassLoader loader = Archives.class.getClassLoader(); - File classpath = File.createTempFile(archiveNamePrefix, ".jar"); classpath.deleteOnExit(); + return jarArchive(classpath, entries, classes); + } + + public static File jarArchive(File archive, Map<String, ?> entries, Class... classes) throws IOException { + final ClassLoader loader = Archives.class.getClassLoader(); + // Create the ZIP file - ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(classpath))); + final ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(archive))); for (Class clazz : classes) { String name = clazz.getName().replace('.', File.separatorChar) + ".class"; @@ -159,6 +163,7 @@ public class Archives { // Complete the ZIP file out.close(); - return classpath; + + return archive; } } \ No newline at end of file