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


Reply via email to