Author: rmannibucau Date: Mon Mar 11 15:54:57 2013 New Revision: 1455198 URL: http://svn.apache.org/r1455198 Log: TOMEE-788 classpath deployment for tomee embedded EJBContainer
Added: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ABean.java tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/ tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/ tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/beans.xml Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java?rev=1455198&r1=1455197&r2=1455198&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java Mon Mar 11 15:54:57 2013 @@ -241,6 +241,10 @@ public class Container { configurationFactory = new ConfigurationFactory(); } + public ConfigurationFactory getConfigurationFactory() { + return configurationFactory; + } + private String getBaseDir() { File file = null; Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java?rev=1455198&r1=1455197&r2=1455198&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java Mon Mar 11 15:54:57 2013 @@ -19,7 +19,10 @@ package org.apache.tomee.embedded; import org.apache.geronimo.osgi.locator.ProviderLocator; import org.apache.openejb.OpenEJBException; +import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.util.Exceptions; +import org.apache.openejb.util.LogCategory; +import org.apache.openejb.util.Logger; import org.apache.openejb.util.NetworkUtil; import org.apache.tomee.catalina.TomEERuntimeException; @@ -30,7 +33,9 @@ import javax.naming.Context; import javax.validation.ValidationException; import java.io.File; import java.net.MalformedURLException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -40,23 +45,42 @@ public class EmbeddedTomEEContainer exte private static final List<String> CONTAINER_NAMES = Arrays.asList(EmbeddedTomEEContainer.class.getName(), "tomee-embedded", "embedded-tomee"); private Container container = new Container(); - private String appId; + private Collection<String> deployedIds = new ArrayList<String>(); - private EmbeddedTomEEContainer(String id) { - appId = id; + private EmbeddedTomEEContainer() { + // no-op + } + + public Container getDelegate() { + return container; } @Override public void close() { - try { - if (tomEEContainer.container.getAppContexts(appId) != null) { - tomEEContainer.container.undeploy(appId); + final Collection<Exception> errors = new ArrayList<Exception>(); + for (final String id : deployedIds) { + if (tomEEContainer.container.getAppContexts(id) != null) { + try { + tomEEContainer.container.undeploy(id); + } catch (final Exception ex) { + Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); + errors.add(ex); + } } + } + deployedIds.clear(); + + try { tomEEContainer.container.stop(); - } catch (Exception e) { - throw Exceptions.newEJBException(e); + } catch (final Exception ex) { + errors.add(ex); + Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex); } tomEEContainer = null; + + if (!errors.isEmpty()) { + throw Exceptions.newEJBException(new TomEERuntimeException(errors.toString())); + } } @Override @@ -77,7 +101,7 @@ public class EmbeddedTomEEContainer exte if ((provider == null && ejbContainerProviders > 1) || (!provider.equals(EmbeddedTomEEContainer.class) - && !CONTAINER_NAMES.contains(provider))) { + && !CONTAINER_NAMES.contains(provider.toString()))) { return null; } @@ -88,7 +112,7 @@ public class EmbeddedTomEEContainer exte final String appId = (String) properties.get(EJBContainer.APP_NAME); final Object modules = properties.get(EJBContainer.MODULES); - tomEEContainer = new EmbeddedTomEEContainer(appId); + tomEEContainer = new EmbeddedTomEEContainer(); Configuration configuration = new Configuration(); if (properties.containsKey(TOMEE_EJBCONTAINER_HTTP_PORT)) { int port; @@ -111,25 +135,32 @@ public class EmbeddedTomEEContainer exte tomEEContainer.container.start(); if (modules instanceof File) { - tomEEContainer.container.deploy(appId, ((File) modules), true); + tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, ((File) modules), appId != null).getId()); } else if (modules instanceof String) { - tomEEContainer.container.deploy(appId, new File((String) modules), true); + tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File((String) modules), appId != null).getId()); } else if (modules instanceof String[]) { - for (String path : (String[]) modules) { - tomEEContainer.container.deploy(appId, new File(path), true); + for (final String path : (String[]) modules) { + tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File(path), appId != null).getId()); } } else if (modules instanceof File[]) { - for (File file : (File[]) modules) { - tomEEContainer.container.deploy(appId, file, true); + for (final File file : (File[]) modules) { + tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId()); } } else { - try { - tomEEContainer.close(); - } catch (Exception e) { - // no-op + SystemInstance.get().getProperties().putAll(properties); + final Collection<File> files = tomEEContainer.container.getConfigurationFactory().getModulesFromClassPath(null, Thread.currentThread().getContextClassLoader()); + if (files.size() == 0) { + try { + tomEEContainer.close(); + } catch (Exception e) { + // no-op + } + tomEEContainer = null; + throw Exceptions.newNoModulesFoundException(); + } + for (final File file : files) { + tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId()); } - tomEEContainer = null; - throw Exceptions.newNoModulesFoundException(); } return tomEEContainer; Added: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ABean.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ABean.java?rev=1455198&view=auto ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ABean.java (added) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ABean.java Mon Mar 11 15:54:57 2013 @@ -0,0 +1,26 @@ +/** + * 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.tomee.embedded; + +import javax.ejb.Singleton; + +@Singleton +public class ABean { + public String embedded() { + return "ok"; + } +} Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java?rev=1455198&r1=1455197&r2=1455198&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java (original) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java Mon Mar 11 15:54:57 2013 @@ -18,8 +18,10 @@ package org.apache.tomee.embedded; import org.apache.commons.io.FileUtils; -import org.apache.openejb.OpenEjbContainer; +import org.apache.openejb.config.DeploymentsResolver; import org.apache.openejb.loader.IO; +import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.spi.ContainerSystem; import org.junit.Test; import javax.ejb.embeddable.EJBContainer; @@ -33,15 +35,6 @@ import static junit.framework.Assert.ass import static junit.framework.Assert.assertNotNull; public class EmbeddedTomEEContainerTest { - @Test(expected = OpenEjbContainer.NoModulesFoundException.class) - public void noModule() { - Properties p = new Properties(); - p.setProperty(EJBContainer.APP_NAME, "test"); - p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName()); - p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, "-1"); - EJBContainer.createEJBContainer(p); - } - @Test public void containerTest() throws Exception { File war = createWar(); @@ -66,6 +59,20 @@ public class EmbeddedTomEEContainerTest } } + @Test + public void classpath() throws Exception { + final Properties p = new Properties(); + p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName()); + p.setProperty(DeploymentsResolver.CLASSPATH_INCLUDE, ".*tomee-embedded.*"); + p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, "-1"); + final EJBContainer container = EJBContainer.createEJBContainer(p); + assertNotNull(container); + final ABean bean = ABean.class.cast(container.getContext().lookup("java:global/tomee-embedded/ABean")); + assertNotNull(bean); + assertEquals("ok", bean.embedded()); + container.close(); + } + private File createWar() throws IOException { File file = new File(System.getProperty("java.io.tmpdir") + "/tomee-" + Math.random()); if (!file.mkdirs() && !file.exists()) { Added: tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/beans.xml URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/beans.xml?rev=1455198&view=auto ============================================================================== --- tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/beans.xml (added) +++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/resources/META-INF/beans.xml Mon Mar 11 15:54:57 2013 @@ -0,0 +1,19 @@ +<?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. +--> +<beans />