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 {