You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2014/09/17 20:20:38 UTC

svn commit: r1625720 - in /tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src: main/java/org/apache/tomee/embedded/ test/java/org/apache/tomee/embedded/

Author: andygumbrecht
Date: Wed Sep 17 18:20:37 2014
New Revision: 1625720

URL: http://svn.apache.org/r1625720
Log:
Use target directory is found.
Fix race condition on Container stop.
Close connector explicitly if available.

Modified:
    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/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java

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=1625720&r1=1625719&r2=1625720&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 Wed Sep 17 18:20:37 2014
@@ -204,7 +204,7 @@ public class Container implements Closea
         if (!configuration.isSkipHttp()) {
             final Connector connector = new Connector(Http11Protocol.class.getName());
             connector.setPort(configuration.getHttpPort());
-            connector.setAttribute("connectionTimeout", "3000");
+            connector.setAttribute("connectionTimeout", "5000");
             tomcat.getService().addConnector(connector);
             tomcat.setConnector(connector);
         }
@@ -322,7 +322,10 @@ public class Container implements Closea
             }
 
             try {
-                file = File.createTempFile("apache-tomee", "-home");
+
+                final File target = new File("target");
+                file = File.createTempFile("apache-tomee", "-home", target.exists() ? target : null);
+
             } catch (final Throwable e) {
 
                 final File tmp = new File("tmp");
@@ -341,6 +344,12 @@ public class Container implements Closea
     }
 
     public void stop() throws Exception {
+
+        final Connector connector = tomcat.getConnector();
+        if (null != connector) {
+            connector.stop();
+        }
+
         try {
             tomcat.stop();
         } catch (final LifecycleException e) {
@@ -523,6 +532,7 @@ public class Container implements Closea
     @Override
     public void close() throws IOException {
         final CountDownLatch end = new CountDownLatch(1);
+        final Container container = Container.this;
         new Thread() {
             {
                 setName("tomee-embedded-await-" + hashCode());
@@ -531,27 +541,20 @@ public class Container implements Closea
             @Override
             public void run() {
                 try {
-                    Container.this.await();
+                    container.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 {
+            container.stop();
+        } catch (final Exception e) {
+            throw new IOException("Failed to stop container", e);
+        }
+
         try {
             end.await();
         } catch (final InterruptedException e) {

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=1625720&r1=1625719&r2=1625720&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 Wed Sep 17 18:20:37 2014
@@ -38,14 +38,15 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 public final class EmbeddedTomEEContainer extends EJBContainer {
     public static final String TOMEE_EJBCONTAINER_HTTP_PORT = "tomee.ejbcontainer.http.port";
-    private static EmbeddedTomEEContainer tomEEContainer;
+    private static final AtomicReference<EmbeddedTomEEContainer> tomEEContainer = new AtomicReference<EmbeddedTomEEContainer>();
     private static final List<String> CONTAINER_NAMES = Arrays.asList(EmbeddedTomEEContainer.class.getName(), "tomee-embedded", "embedded-tomee");
 
-    private Container container = new Container();
-    private Collection<String> deployedIds = new ArrayList<String>();
+    private final Container container = new Container();
+    private final Collection<String> deployedIds = new ArrayList<String>();
 
     private EmbeddedTomEEContainer() {
         // no-op
@@ -59,9 +60,9 @@ public final class EmbeddedTomEEContaine
     public void close() {
         final Collection<Exception> errors = new ArrayList<Exception>();
         for (final String id : deployedIds) {
-            if (tomEEContainer.container.getAppContexts(id) != null) {
+            if (tomEEContainer.get().container.getAppContexts(id) != null) {
                 try {
-                    tomEEContainer.container.undeploy(id);
+                    tomEEContainer.get().container.undeploy(id);
                 } catch (final Exception ex) {
                     Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex);
                     errors.add(ex);
@@ -71,12 +72,13 @@ public final class EmbeddedTomEEContaine
         deployedIds.clear();
 
         try {
-            tomEEContainer.container.close();
+            tomEEContainer.get().container.close();
         } catch (final Exception ex) {
             errors.add(ex);
             Logger.getInstance(LogCategory.OPENEJB, EmbeddedTomEEContainer.class).error(ex.getMessage(), ex);
+        }finally {
+            tomEEContainer.set(null);
         }
-        tomEEContainer = null;
 
         if (!errors.isEmpty()) {
             throw Exceptions.newEJBException(new TomEERuntimeException(errors.toString()));
@@ -85,7 +87,7 @@ public final class EmbeddedTomEEContaine
 
     @Override
     public Context getContext() {
-        return tomEEContainer.container.getJndiContext();
+        return tomEEContainer.get().container.getJndiContext();
     }
 
     public static class EmbeddedTomEEContainerProvider implements EJBContainerProvider {
@@ -105,14 +107,14 @@ public final class EmbeddedTomEEContaine
                 return null;
             }
 
-            if (tomEEContainer != null) {
-                return tomEEContainer;
+            if (tomEEContainer.get() != null) {
+                return tomEEContainer.get();
             }
 
             final String appId = (String) properties.get(EJBContainer.APP_NAME);
             final Object modules = properties.get(EJBContainer.MODULES);
 
-            tomEEContainer = new EmbeddedTomEEContainer();
+            tomEEContainer.set(new EmbeddedTomEEContainer());
             final Configuration configuration = new Configuration();
             if (properties.containsKey(TOMEE_EJBCONTAINER_HTTP_PORT)) {
                 int port;
@@ -130,54 +132,54 @@ public final class EmbeddedTomEEContaine
                 configuration.setHttpPort(port);
             }
             System.setProperty(TOMEE_EJBCONTAINER_HTTP_PORT, Integer.toString(configuration.getHttpPort()));
-            tomEEContainer.container.setup(configuration);
+            tomEEContainer.get().container.setup(configuration);
             try {
-                tomEEContainer.container.start();
+                tomEEContainer.get().container.start();
 
                 if (modules instanceof File) {
-                    tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, ((File) modules), appId != null).getId());
+                    tomEEContainer.get().deployedIds.add(tomEEContainer.get().container.deploy(appId, ((File) modules), appId != null).getId());
                 } else if (modules instanceof String) {
-                    tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File((String) modules), appId != null).getId());
+                    tomEEContainer.get().deployedIds.add(tomEEContainer.get().container.deploy(appId, new File((String) modules), appId != null).getId());
                 } else if (modules instanceof String[]) {
                     for (final String path : (String[]) modules) {
-                        tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, new File(path), appId != null).getId());
+                        tomEEContainer.get().deployedIds.add(tomEEContainer.get().container.deploy(appId, new File(path), appId != null).getId());
                     }
                 } else if (modules instanceof File[]) {
                     for (final File file : (File[]) modules) {
-                        tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId());
+                        tomEEContainer.get().deployedIds.add(tomEEContainer.get().container.deploy(appId, file, appId != null).getId());
                     }
                 } else {
                     SystemInstance.get().getProperties().putAll(properties);
-                    final Collection<File> files = tomEEContainer.container.getConfigurationFactory().getModulesFromClassPath(null, Thread.currentThread().getContextClassLoader());
+                    final Collection<File> files = tomEEContainer.get().container.getConfigurationFactory().getModulesFromClassPath(null, Thread.currentThread().getContextClassLoader());
                     if (files.size() == 0) {
                         try {
-                            tomEEContainer.close();
+                            tomEEContainer.get().close();
                         } catch (final Exception e) {
                             // no-op
                         }
-                        tomEEContainer = null;
+                        tomEEContainer.set(null);
                         throw Exceptions.newNoModulesFoundException();
                     }
                     for (final File file : files) {
-                        tomEEContainer.deployedIds.add(tomEEContainer.container.deploy(appId, file, appId != null).getId());
+                        tomEEContainer.get().deployedIds.add(tomEEContainer.get().container.deploy(appId, file, appId != null).getId());
                     }
                 }
 
-                return tomEEContainer;
+                return tomEEContainer.get();
             } catch (final OpenEJBException e) {
-                tomEEContainer.close();
+                tomEEContainer.get().close();
                 throw new EJBException(e);
             } catch (final MalformedURLException e) {
-                tomEEContainer.close();
+                tomEEContainer.get().close();
                 throw new EJBException(e);
             } catch (final ValidationException ve) {
-                if (tomEEContainer != null) {
-                    tomEEContainer.close();
+                if (tomEEContainer.get() != null) {
+                    tomEEContainer.get().close();
                 }
                 throw ve;
             } catch (final Exception e) {
-                if (tomEEContainer != null) {
-                    tomEEContainer.close();
+                if (tomEEContainer.get() != null) {
+                    tomEEContainer.get().close();
                 }
                 if (e instanceof EJBException) {
                     throw (EJBException) e;

Modified: tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java?rev=1625720&r1=1625719&r2=1625720&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/EmbeddedTomEEContainerTest.java Wed Sep 17 18:20:37 2014
@@ -47,7 +47,7 @@ public class EmbeddedTomEEContainerTest 
             assertNotNull(container);
             assertNotNull(container.getContext());
             final URL url = new URL("http://127.0.0.1:" + System.getProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT) + "/test/index.html");
-            assertEquals("true", getOk(url, 5));
+            assertEquals("true", getOk(url, 2));
 
         } finally {