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 2014/09/14 16:17:03 UTC

svn commit: r1624854 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openejb/config/ tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ tomee/tomee-embedded/ tomee/tomee-embedded/src/main/java/org/apache/tomee/embedd...

Author: rmannibucau
Date: Sun Sep 14 14:17:02 2014
New Revision: 1624854

URL: http://svn.apache.org/r1624854
Log:
TOMEE-1345 more embeddability for tomee embedded

Added:
    tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
    tomee/tomee/trunk/tomee/tomee-embedded/pom.xml
    tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
    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/main/java/org/apache/tomee/embedded/Main.java
    tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Sun Sep 14 14:17:02 2014
@@ -925,11 +925,12 @@ public class DeploymentLoader implements
                             urlSet = NewLoaderLogic.applyBuiltinExcludes(urlSet);
                             containerUrls = urlSet.getUrls();
 
+                            final boolean skipContainerFolders = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.scan.webapp.container.skip-folder", "true"));
                             final Iterator<URL> it = containerUrls.iterator();
                             while (it.hasNext()) { // remove lib/
                                 final File file = URLs.toFile(it.next());
                                 // TODO: see if websocket should be added in default.exclusions
-                                if (file.isDirectory() || file.getName().endsWith("tomcat-websocket.jar")) {
+                                if ((skipContainerFolders && file.isDirectory()) || file.getName().endsWith("tomcat-websocket.jar")) {
                                     it.remove();
                                 }
                             }

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java Sun Sep 14 14:17:02 2014
@@ -340,7 +340,7 @@ public class TomEEWebappClassLoader exte
 
     @Override
     public String toString() {
-        return "LazyStop" + super.toString();
+        return "TomEE" + super.toString();
     }
 
     public static void initContext(final ClassLoaderConfigurer configurer) {

Modified: tomee/tomee/trunk/tomee/tomee-embedded/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/pom.xml?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/pom.xml Sun Sep 14 14:17:02 2014
@@ -256,6 +256,12 @@
       <artifactId>commons-io</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap</groupId>
+      <artifactId>shrinkwrap-impl-base</artifactId>
+      <version>${version.shrinkwrap.shrinkwrap}</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
 

Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java Sun Sep 14 14:17:02 2014
@@ -16,6 +16,8 @@
  */
 package org.apache.tomee.embedded;
 
+import org.apache.openejb.util.NetworkUtil;
+
 import java.io.File;
 import java.util.Properties;
 
@@ -50,6 +52,11 @@ public class Configuration {
         this.httpPort = httpPort;
     }
 
+    public Configuration randomHttpPort() {
+        this.httpPort = NetworkUtil.getNextAvailablePort();
+        return this;
+    }
+
     public int getStopPort() {
         return stopPort;
     }
@@ -180,4 +187,12 @@ public class Configuration {
     public void setSslProtocol(final String sslProtocol) {
         this.sslProtocol = sslProtocol;
     }
+
+    public Configuration property(final String key, final String value) {
+        if (properties == null) {
+            properties = new Properties();
+        }
+        properties.setProperty(key, value);
+        return this;
+    }
 }

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=1624854&r1=1624853&r2=1624854&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 Sun Sep 14 14:17:02 2014
@@ -47,6 +47,8 @@ import org.apache.openejb.util.LogCatego
 import org.apache.openejb.util.Logger;
 import org.apache.tomee.catalina.TomEERuntimeException;
 import org.apache.tomee.catalina.TomcatLoader;
+import org.apache.tomee.catalina.TomcatWebAppBuilder;
+import org.apache.tomee.catalina.session.FastNonSecureRandom;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -64,29 +66,36 @@ import java.io.Writer;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
 
 /**
  * @version $Rev$ $Date$
  */
-public class Container {
+public class Container implements AutoCloseable {
     static {
         // org.apache.naming
         Assembler.installNaming("org.apache.naming", true);
     }
 
-    private final Map<String, String> moduleIds = new HashMap<String, String>(); // TODO: manage multimap
-    private final Map<String, AppContext> appContexts = new HashMap<String, AppContext>(); // TODO: manage multimap
-    private final Map<String, AppInfo> infos = new HashMap<String, AppInfo>(); // TODO: manage multimap
+    private final Map<String, String> moduleIds = new HashMap<>(); // TODO: manage multimap
+    private final Map<String, AppContext> appContexts = new HashMap<>(); // TODO: manage multimap
+    private final Map<String, AppInfo> infos = new HashMap<>(); // TODO: manage multimap
     protected Configuration configuration;
     private File base;
     private ConfigurationFactory configurationFactory;
     private Assembler assembler;
     private Tomcat tomcat;
 
+    // start the container directly
+    public Container(final Configuration configuration) throws Exception {
+        setup(configuration);
+        start();
+    }
+
     public Container() {
-        configuration = new Configuration();
-        configuration.setHttpPort(23880);
-        configuration.setStopPort(23881);
+        this.configuration = new Configuration();
+        this.configuration.setHttpPort(23880);
+        this.configuration.setStopPort(23881);
     }
 
     private static boolean sameApplication(final File file, final WebAppInfo webApp) {
@@ -302,9 +311,7 @@ public class Container {
     }
 
     private String getBaseDir() {
-
-        File file = null;
-
+        File file;
         try {
 
             final String dir = configuration.getDir();
@@ -331,7 +338,7 @@ public class Container {
             return file.getAbsolutePath();
 
         } catch (final IOException e) {
-            throw new TomEERuntimeException("Failed to get or create base dir: " + file, e);
+            throw new TomEERuntimeException("Failed to get or create base dir: " + configuration.getDir(), e);
         }
     }
 
@@ -495,10 +502,59 @@ public class Container {
         return dir;
     }
 
+    public Tomcat getTomcat() {
+        return tomcat;
+    }
+
     public void await() {
         tomcat.getServer().await();
     }
 
+    @Override
+    public void close() throws Exception {
+        final CountDownLatch end = new CountDownLatch(1);
+        new Thread() {
+            {
+                setName("tomee-embedded-await-" + hashCode());
+            }
+
+            @Override
+            public void run() {
+                try {
+                    Container.this.await();
+                    end.countDown();
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+        }.start();
+        new Thread() {
+            {
+                setName("tomee-embedded-stop-" + hashCode());
+            }
+
+            @Override
+            public void run() {
+                try {
+                    Container.this.stop();
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+        }.start();
+        end.await();
+    }
+
+    public org.apache.catalina.Context addContext(final String context, final String path) {
+        final File root = new File(path);
+        if (!root.exists()) {
+            Files.mkdirs(root);
+        }
+        final org.apache.catalina.Context ctx = getTomcat().addContext(context, root.getAbsolutePath()); // we don't want to be relative
+        SystemInstance.get().getComponent(TomcatWebAppBuilder.class).init(StandardContext.class.cast(ctx));
+        return ctx;
+    }
+
     private static class TomcatWithFastSessionIDs extends Tomcat {
 
         @Override
@@ -512,7 +568,7 @@ public class Container {
                         StandardManager m = (StandardManager) StandardContext.class.cast(c).getManager();
                         if (m == null) {
                             m = new StandardManager();
-                            m.setSecureRandomClass("org.apache.catalina.startup.FastNonSecureRandom");
+                            m.setSecureRandomClass(FastNonSecureRandom.class.getName());
                             StandardContext.class.cast(c).setManager(m);
                         }
                     }

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=1624854&r1=1624853&r2=1624854&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 Sun Sep 14 14:17:02 2014
@@ -71,7 +71,7 @@ public final class EmbeddedTomEEContaine
         deployedIds.clear();
 
         try {
-            tomEEContainer.container.stop();
+            tomEEContainer.container.close();
         } catch (final Exception ex) {
             errors.add(ex);
             Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex);

Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java Sun Sep 14 14:17:02 2014
@@ -49,10 +49,7 @@ public class Main {
 
         // run TomEE
         try {
-            final Container container = new Container();
-            container.setup(createConfiguration(line));
-            container.start();
-
+            final Container container = new Container(createConfiguration(line));
             if (line.hasOption(PATH)) {
                 final String[] contexts;
                 if (line.hasOption(CONTEXT)) {

Added: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java?rev=1624854&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java (added)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java Sun Sep 14 14:17:02 2014
@@ -0,0 +1,84 @@
+/**
+ * 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 org.apache.catalina.Context;
+import org.apache.catalina.Wrapper;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.exporter.ExplodedExporter;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class ManualDeploymentTest {
+    @Test
+    public void run() throws IOException {
+        final Configuration configuration = new Configuration().randomHttpPort();
+        configuration.setDir(Files.mkdirs(new File("target/" + getClass().getSimpleName() + "-tomcat")).getAbsolutePath());
+
+        try (final Container container = new Container(configuration)) {
+            // tomee-embedded (this "container url" is filtered: name prefix + it is a directory (target/test-classes)
+            final File parent = Files.mkdirs(new File("target/" + getClass().getSimpleName()));
+            final File war = ShrinkWrap.create(WebArchive.class, "the-webapp")
+                    .addClass(Foo.class)
+                    .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") // activate CDI
+                    .as(ExplodedExporter.class)
+                    .exportExploded(parent);
+
+            final Context ctx = container.addContext("/", war.getAbsolutePath());
+
+            final Wrapper wrapper = Tomcat.addServlet(ctx, "awesome", AServlet.class.getName());
+            ctx.addServletMapping("/awesome", wrapper.getName());
+
+            assertEquals("Awesome", IO.slurp(new URL("http://localhost:" + configuration.getHttpPort() + "/awesome")).trim());
+        } catch (final Exception e) {
+            e.printStackTrace();
+            fail(e.getMessage());
+        }
+    }
+
+    public static class AServlet extends HttpServlet {
+        @Inject
+        private Foo foo;
+
+        @Override
+        protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+            resp.getWriter().write(foo.howIsIt());
+        }
+    }
+
+    public static class Foo {
+        public String howIsIt() {
+            return "Awesome";
+        }
+    }
+}

Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java?rev=1624854&r1=1624853&r2=1624854&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java Sun Sep 14 14:17:02 2014
@@ -69,7 +69,6 @@ public class SslTomEETest {
         final Container container = new Container();
         container.setup(configuration);
         container.start();
-
         try {
             assertEquals(8443, ManagementFactory.getPlatformMBeanServer().getAttribute(new ObjectName("Tomcat:type=ProtocolHandler,port=8443"), "port"));
         } finally {