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 />