Repository: tomee Updated Branches: refs/heads/master 6c3a16d5c -> f38677d14
fixing wrong ServerServlet default + adding debug option to remote EJBContainer Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c6f737d9 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c6f737d9 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c6f737d9 Branch: refs/heads/master Commit: c6f737d93b0132561925996b22f083b371d870b2 Parents: 6c3a16d Author: Romain manni-Bucau <rmannibu...@gmail.com> Authored: Fri Jul 22 09:24:00 2016 +0200 Committer: Romain manni-Bucau <rmannibu...@gmail.com> Committed: Fri Jul 22 09:24:00 2016 +0200 ---------------------------------------------------------------------- .../org/apache/openejb/config/RemoteServer.java | 22 +++++++++++----- .../openejb/server/httpd/ServerServlet.java | 2 +- .../apache/tomee/RemoteTomEEEJBContainer.java | 27 +++++++++++++++----- .../apache/tomee/RemoteTomEEEJBContainerIT.java | 21 +++++++++++++-- 4 files changed, 57 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/c6f737d9/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java index a127235..6cb1ef4 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java @@ -60,7 +60,7 @@ public class RemoteServer { public static final String START = "start"; public static final String STOP = "stop"; - private final boolean debug = options.get(OPENEJB_SERVER_DEBUG, false); + private boolean debug = options.get(OPENEJB_SERVER_DEBUG, false); private final boolean profile = options.get("openejb.server.profile", false); private final boolean tomcat; private final String javaOpts = System.getProperty("java.opts"); @@ -397,22 +397,26 @@ public class RemoteServer { public void run() { try { p.waitFor(); + synchronized (kill) { + kill.remove(p); + } } catch (final InterruptedException e) { - //Ignore + Thread.interrupted(); + } finally { + latch.countDown(); } - - latch.countDown(); } }, "process-waitFor"); t.start(); try { - if (!latch.await(10, TimeUnit.SECONDS)) { + if (!latch.await(Integer.getInteger("openejb.server.waitFor.seconds", 10), TimeUnit.SECONDS)) { killOnExit(p); throw new RuntimeException("Timeout waiting for process"); } } catch (final InterruptedException e) { + Thread.interrupted(); killOnExit(p); } } @@ -685,7 +689,9 @@ public class RemoteServer { } private static void killOnExit(final Process p) { - kill.add(p); + synchronized (kill) { + kill.add(p); + } } // Shutdown hook for processes @@ -695,6 +701,10 @@ public class RemoteServer { Runtime.getRuntime().addShutdownHook(new CleanUpThread()); } + public void setDebug(final boolean debug) { + this.debug = debug; + } + public static class CleanUpThread extends Thread { @Override public void run() { http://git-wip-us.apache.org/repos/asf/tomee/blob/c6f737d9/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/ServerServlet.java ---------------------------------------------------------------------- diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/ServerServlet.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/ServerServlet.java index 9f424b6..5383a34 100644 --- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/ServerServlet.java +++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/ServerServlet.java @@ -43,7 +43,7 @@ public class ServerServlet extends HttpServlet { if (activatedStr != null) { activated = Boolean.parseBoolean(activatedStr); } else { - activated = Boolean.getBoolean(getClass().getName() + '.' + ACTIVATED_INIT_PARAM); + activated = Boolean.parseBoolean(System.getProperty(getClass().getName() + '.' + ACTIVATED_INIT_PARAM, "true")); } } http://git-wip-us.apache.org/repos/asf/tomee/blob/c6f737d9/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java ---------------------------------------------------------------------- diff --git a/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java b/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java index 8adeed7..7b89751 100644 --- a/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java +++ b/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java @@ -31,15 +31,19 @@ import javax.ejb.embeddable.EJBContainer; import javax.ejb.spi.EJBContainerProvider; import javax.naming.Context; import javax.naming.InitialContext; +import javax.naming.NamingException; import javax.validation.ValidationException; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import static java.lang.Thread.sleep; + public class RemoteTomEEEJBContainer extends EJBContainer { private static RemoteTomEEEJBContainer instance; private RemoteServer container; @@ -60,7 +64,8 @@ public class RemoteTomEEEJBContainer extends EJBContainer { private static final List<String> CONTAINER_NAMES = Arrays.asList(RemoteTomEEEJBContainer.class.getName(), "tomee-remote", "remote-tomee"); @Override - public EJBContainer createEJBContainer(final Map<?, ?> properties) { + public EJBContainer createEJBContainer(final Map<?, ?> rawProperties) { + final Map<?, ?> properties = rawProperties == null ? new HashMap<>() : rawProperties; final Object provider = properties.get(EJBContainer.PROVIDER); int ejbContainerProviders = 1; try { @@ -99,6 +104,7 @@ public class RemoteTomEEEJBContainer extends EJBContainer { try { instance = new RemoteTomEEEJBContainer(); instance.container = new RemoteServer(); + instance.container.setDebug("true".equalsIgnoreCase(String.valueOf(properties.get("debug")))); instance.container.setPortStartup(Integer.parseInt(parser.http())); try { @@ -113,14 +119,23 @@ public class RemoteTomEEEJBContainer extends EJBContainer { instance.context = new InitialContext(new Properties() {{ setProperty(Context.INITIAL_CONTEXT_FACTORY, RemoteInitialContextFactory.class.getName()); - setProperty(Context.PROVIDER_URL, remoteEjb); + setProperty(Context.PROVIDER_URL, String.valueOf(properties.containsKey(Context.PROVIDER_URL) ? properties.get(Context.PROVIDER_URL) : remoteEjb)); }}); Deployer deployer = null; - for (int i = 0; i < (properties.containsKey("retries") ? Integer.parseInt(String.class.cast(properties.get("retries"))) : 20); i++) { - deployer = Deployer.class.cast(instance.context.lookup("openejb/DeployerBusinessRemote")); - if (deployer != null) { - break; + for (int i = 0; i < (properties.containsKey("retries") ? Integer.parseInt(String.class.cast(properties.get("retries"))) : 4); i++) { + try { + deployer = Deployer.class.cast(instance.context.lookup("openejb/DeployerBusinessRemote")); + if (deployer != null) { + break; + } + } catch (final NamingException ne) { + try { + sleep(250); + } catch (final InterruptedException ie) { + Thread.interrupted(); + break; + } } } if (deployer == null) { http://git-wip-us.apache.org/repos/asf/tomee/blob/c6f737d9/tomee/apache-tomee/src/test/java/org/apache/tomee/RemoteTomEEEJBContainerIT.java ---------------------------------------------------------------------- diff --git a/tomee/apache-tomee/src/test/java/org/apache/tomee/RemoteTomEEEJBContainerIT.java b/tomee/apache-tomee/src/test/java/org/apache/tomee/RemoteTomEEEJBContainerIT.java index 17731b9..ec1cb75 100644 --- a/tomee/apache-tomee/src/test/java/org/apache/tomee/RemoteTomEEEJBContainerIT.java +++ b/tomee/apache-tomee/src/test/java/org/apache/tomee/RemoteTomEEEJBContainerIT.java @@ -19,6 +19,7 @@ package org.apache.tomee; import org.apache.openejb.loader.Files; import org.apache.openejb.loader.IO; import org.apache.openejb.util.NetworkUtil; +import org.junit.After; import org.junit.Test; import javax.ejb.embeddable.EJBContainer; @@ -33,7 +34,20 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class RemoteTomEEEJBContainerIT { - @Test + private EJBContainer container; + + @After + public void close() { + try { + if (container != null) { + container.close(); + } + } catch (final RuntimeException re) { + // no-op + } + } + + @Test(timeout = 300000) public void run() throws IOException { final File app = new File("target/mock/webapp"); Files.mkdirs(app); @@ -77,18 +91,21 @@ public class RemoteTomEEEJBContainerIT { "</Server>\n"); serverXml.close(); - EJBContainer container = null; + container = null; try { container = EJBContainer.createEJBContainer(new HashMap<Object, Object>() {{ put(EJBContainer.PROVIDER, "tomee-remote"); put(EJBContainer.MODULES, app.getAbsolutePath()); put("openejb.home", tomee.getAbsolutePath()); + put("retries", "120"); + put("debug", System.getProperty("RemoteTomEEEJBContainerIT.debug", "false")); }}); final URL url = new URL("http://localhost:" + http + "/webapp/index.html"); assertEquals("Hello", IO.slurp(url)); } finally { if (container != null) { container.close(); + container = null; } } }