Author: rmannibucau
Date: Sun Sep 14 14:28:52 2014
New Revision: 1624855

URL: http://svn.apache.org/r1624855
Log:
backporting start of work done around TOMEE-1345 for embedded tomee

Added:
    
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
Modified:
    tomee/tomee/branches/tomee-1.7.x/arquillian/pom.xml
    
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    tomee/tomee/branches/tomee-1.7.x/pom.xml
    tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/pom.xml
    
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
    
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
    
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
    
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java

Modified: tomee/tomee/branches/tomee-1.7.x/arquillian/pom.xml
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/arquillian/pom.xml?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/arquillian/pom.xml (original)
+++ tomee/tomee/branches/tomee-1.7.x/arquillian/pom.xml Sun Sep 14 14:28:52 2014
@@ -34,7 +34,6 @@
   <properties>
     <version.arquillian>1.1.5.Final</version.arquillian>
     
<version.shrinkwrap.descriptor>2.0.0-alpha-6</version.shrinkwrap.descriptor>
-    <version.shrinkwrap.shrinkwrap>1.1.3</version.shrinkwrap.shrinkwrap>
     <test.coverage.skip>true</test.coverage.skip>
   </properties>
 

Modified: 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Sun Sep 14 14:28:52 2014
@@ -930,11 +930,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/branches/tomee-1.7.x/pom.xml
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/pom.xml?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/pom.xml (original)
+++ tomee/tomee/branches/tomee-1.7.x/pom.xml Sun Sep 14 14:28:52 2014
@@ -184,6 +184,7 @@
     <version.groovy>2.3.0</version.groovy>
 
     <!-- arquillian related -->
+    <version.shrinkwrap.shrinkwrap>1.1.3</version.shrinkwrap.shrinkwrap>
     <version.arquillian.bom>1.1.5.Final</version.arquillian.bom>
     <version.shrinkwrap.resolver.bom>2.1.0</version.shrinkwrap.resolver.bom>
   </properties>

Modified: tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/pom.xml
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/pom.xml?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/pom.xml (original)
+++ tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/pom.xml Sun Sep 14 
14:28:52 2014
@@ -187,6 +187,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/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
 Sun Sep 14 14:28:52 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/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
 Sun Sep 14 14:28:52 2014
@@ -20,6 +20,7 @@ import org.apache.catalina.LifecycleExce
 import org.apache.catalina.Server;
 import org.apache.catalina.Service;
 import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardServer;
 import org.apache.catalina.session.StandardManager;
 import org.apache.catalina.startup.CatalinaProperties;
@@ -46,6 +47,7 @@ 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.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -54,6 +56,7 @@ import org.apache.velocity.runtime.resou
 
 import javax.naming.Context;
 import javax.naming.NamingException;
+import java.io.Closeable;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
@@ -63,11 +66,12 @@ 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 Closeable {
     static {
         // org.apache.naming
         Assembler.installNaming("org.apache.naming", true);
@@ -82,10 +86,16 @@ public class Container {
     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) {
@@ -301,9 +311,7 @@ public class Container {
     }
 
     private String getBaseDir() {
-
-        File file = null;
-
+        File file;
         try {
 
             final String dir = configuration.getDir();
@@ -330,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);
         }
     }
 
@@ -494,10 +502,63 @@ public class Container {
         return dir;
     }
 
+    public Tomcat getTomcat() {
+        return tomcat;
+    }
+
     public void await() {
         tomcat.getServer().await();
     }
 
+    @Override
+    public void close() throws IOException {
+        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();
+        try {
+            end.await();
+        } catch (final InterruptedException e) {
+            Thread.interrupted();
+        }
+    }
+
+    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

Modified: 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/EmbeddedTomEEContainer.java
 Sun Sep 14 14:28:52 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/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java?rev=1624855&r1=1624854&r2=1624855&view=diff
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
 (original)
+++ 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
 Sun Sep 14 14:28:52 2014
@@ -47,10 +47,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/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java?rev=1624855&view=auto
==============================================================================
--- 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
 (added)
+++ 
tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ManualDeploymentTest.java
 Sun Sep 14 14:28:52 2014
@@ -0,0 +1,87 @@
+/**
+ * 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 Exception {
+        final Configuration configuration = new 
Configuration().randomHttpPort();
+        configuration.setDir(Files.mkdirs(new File("target/" + 
getClass().getSimpleName() + "-tomcat")).getAbsolutePath());
+
+        final Container container = new Container(configuration);
+        try {
+            // 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());
+        } finally {
+            container.close();
+        }
+    }
+
+    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";
+        }
+    }
+}


Reply via email to