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 {