You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/10/14 18:08:49 UTC

svn commit: r1183405 - in /openejb/trunk/openejb/assembly/tomee/tomee-embedded/src: main/java/org/apache/tomee/embedded/ main/resources/META-INF/services/ test/ test/java/ test/java/org/ test/java/org/apache/ test/java/org/apache/tomee/ test/java/org/a...

Author: rmannibucau
Date: Fri Oct 14 16:08:49 2011
New Revision: 1183405

URL: http://svn.apache.org/viewvc?rev=1183405&view=rev
Log:
adding a first draft for TomEE embedded EJBContainer

Added:
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java
Modified:
    openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java

Modified: openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java?rev=1183405&r1=1183404&r2=1183405&view=diff
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java (original)
+++ openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java Fri Oct 14 16:08:49 2011
@@ -66,6 +66,7 @@ public class Container {
     protected Configuration configuration;
     private File base;
     private Map<String, String> moduleIds = new HashMap<String, String>();
+    private Map<String, AppContext> appContexts = new HashMap<String, AppContext>();
     private ConfigurationFactory configurationFactory;
     private Assembler assembler;
     private final Tomcat tomcat;
@@ -208,13 +209,19 @@ public class Container {
 
     public void deploy(String name, File file) throws OpenEJBException, IOException, NamingException {
         AppInfo appInfo = configurationFactory.configureApplication(file);
-        assembler.createApplication(appInfo);
+        appContexts.put(name, assembler.createApplication(appInfo));
         moduleIds.put(name, appInfo.path);
     }
 
     public void undeploy(String name) throws UndeployException, NoSuchApplicationException {
         String moduleId = moduleIds.get(name);
         assembler.destroyApplication(moduleId);
+        moduleIds.remove(name);
+        appContexts.remove(name);
+    }
+
+    public AppContext getAppContexts(String moduleId) {
+        return appContexts.get(moduleId);
     }
 
     private void deleteTree(File file) {

Added: openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java?rev=1183405&view=auto
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java (added)
+++ openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java Fri Oct 14 16:08:49 2011
@@ -0,0 +1,99 @@
+package org.apache.tomee.embedded;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.util.Exceptions;
+
+import javax.ejb.EJBException;
+import javax.ejb.embeddable.EJBContainer;
+import javax.ejb.spi.EJBContainerProvider;
+import javax.naming.Context;
+import javax.validation.ValidationException;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.Map;
+
+/**
+ * @author rmannibucau
+ */
+public class EmbeddedTomEEContainer extends EJBContainer {
+    private static EmbeddedTomEEContainer tomEEContainer;
+
+    private Container container = new Container();
+    private String appId;
+
+    private EmbeddedTomEEContainer(String id) {
+        appId = id;
+    }
+
+    @Override public void close() {
+        try {
+            if (tomEEContainer.container.getAppContexts(appId) != null) {
+                tomEEContainer.container.undeploy(appId);
+            }
+            tomEEContainer.container.stop();
+        } catch (Exception e) {
+            throw Exceptions.newEJBException(e);
+        }
+        tomEEContainer = null;
+    }
+
+    @Override public Context getContext() {
+        return tomEEContainer.container.getAppContexts(appId).getGlobalJndiContext();
+    }
+
+    public static class EmbeddedTomEEContainerProvider implements EJBContainerProvider {
+        @Override public EJBContainer createEJBContainer(Map<?, ?> properties) {
+            Object provider = properties.get(EJBContainer.PROVIDER);
+            if (provider != null && !provider.equals(EmbeddedTomEEContainer.class) && !provider.equals(EmbeddedTomEEContainer.class.getName())) {
+                return null;
+            }
+
+            if (tomEEContainer != null) {
+                return tomEEContainer;
+            }
+
+            final String appId = (String) properties.get(EJBContainer.APP_NAME);
+            final Object modules = properties.get(EJBContainer.MODULES);
+
+            tomEEContainer = new EmbeddedTomEEContainer(appId);
+            try {
+                tomEEContainer.container.start();
+
+                if (modules instanceof File) {
+                    tomEEContainer.container.deploy(appId, ((File) modules));
+                } else if (modules instanceof String) {
+                    tomEEContainer.container.deploy(appId, new File((String) modules));
+                } else {
+                    try {
+                        tomEEContainer.close();
+                    } catch (Exception e) {
+                        // no-op
+                    }
+                    tomEEContainer = null;
+                    throw Exceptions.newNoModulesFoundException();
+                }
+
+                return tomEEContainer;
+            } catch (OpenEJBException e) {
+                throw new EJBException(e);
+            } catch (MalformedURLException e) {
+                throw new EJBException(e);
+            } catch (ValidationException ve) {
+                throw ve;
+            } catch (Exception e) {
+                if (e instanceof EJBException) {
+                    throw (EJBException) e;
+                }
+                throw new RuntimeException("initialization exception", e);
+            } finally {
+                if (tomEEContainer == null) {
+                    try {
+                        tomEEContainer.close();
+                    } catch (Exception e) {
+                        // no-op
+                    }
+                }
+            }
+        }
+    }
+}

Added: openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider?rev=1183405&view=auto
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider (added)
+++ openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider Fri Oct 14 16:08:49 2011
@@ -0,0 +1 @@
+org.apache.tomee.embedded.EmbeddedTomEEContainer$EmbeddedTomEEContainerProvider

Added: openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java?rev=1183405&view=auto
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java (added)
+++ openejb/trunk/openejb/assembly/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java Fri Oct 14 16:08:49 2011
@@ -0,0 +1,61 @@
+package org.apache.tomee.embedded;
+
+import org.apache.openejb.OpenEjbContainer;
+import org.apache.openejb.util.IOUtils;
+import org.junit.Test;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.Context;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
+import java.util.jar.JarFile;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
+/**
+ * @author rmannibucau
+ */
+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());
+        EJBContainer.createEJBContainer(p);
+    }
+
+    @Test public void containerTest() throws Exception {
+        Properties p = new Properties();
+        p.setProperty(EJBContainer.APP_NAME, "test");
+        p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName());
+        p.setProperty(EJBContainer.MODULES, createWar());
+        try {
+            EJBContainer container = EJBContainer.createEJBContainer(p);
+            assertNotNull(container);
+            assertNotNull(container.getContext());
+            container.close();
+        } finally {
+            new File(p.getProperty(EJBContainer.MODULES)).delete();
+        }
+    }
+
+    private String createWar() throws IOException {
+        File file = new File(System.getProperty("java.io.tmpdir") + "/tomee-" + Math.random());
+        file.mkdirs();
+        write("ok=true", new File(file, "index.html"));
+        write("<beans />", new File(file, "META-INF/beans.xml"));
+        return file.getAbsolutePath();
+    }
+
+    private static void write(String content, File file) throws IOException {
+        file.getParentFile().mkdirs();
+        FileWriter index = new FileWriter(file);
+        index.write(content);
+        index.close();
+    }
+}