You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2015/12/29 15:17:48 UTC
svn commit: r1722138 -
/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java
Author: bdelacretaz
Date: Tue Dec 29 14:17:48 2015
New Revision: 1722138
URL: http://svn.apache.org/viewvc?rev=1722138&view=rev
Log:
SLING-4728 - cleanup thread
Modified:
sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java
Modified: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java?rev=1722138&r1=1722137&r2=1722138&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java (original)
+++ sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java Tue Dec 29 14:17:48 2015
@@ -24,10 +24,12 @@ import org.junit.rules.ExternalResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** Setup a Crankstart-launched instance for our tests */
+/** JUnit Rule that starts a Crankstart instance, using a set of provisioning
+ * models. See our integration tests for examples.
+ */
public class CrankstartSetup extends ExternalResource {
- private final Logger log = LoggerFactory.getLogger(getClass());
+ private static final Logger log = LoggerFactory.getLogger(CrankstartSetup.class);
private final int port = getAvailablePort();
private final String storagePath = getOsgiStoragePath();
private Thread crankstartThread;
@@ -35,16 +37,34 @@ public class CrankstartSetup extends Ext
private final Properties replacementProps = new Properties();
private static List<CrankstartSetup> toCleanup = new ArrayList<CrankstartSetup>();
+ private static Thread shutdownHook;
private VariableResolver variablesResolver = new PropertiesVariableResolver(replacementProps, Launcher.VARIABLE_OVERRIDE_PREFIX);
private String [] classpathModelPaths;
+
@Override
public String toString() {
return getClass().getSimpleName() + ", port " + port + ", OSGi storage " + storagePath;
}
+ public CrankstartSetup() {
+ synchronized (getClass()) {
+ if(shutdownHook == null) {
+ shutdownHook = new Thread(CrankstartSetup.class.getSimpleName() + " shutdown thread") {
+ @Override
+ public void run() {
+ log.info("Starting cleanup");
+ cleanup();
+ log.info("Cleanup done");
+ }
+ };
+ Runtime.getRuntime().addShutdownHook(shutdownHook);
+ }
+ }
+ }
+
public CrankstartSetup withModelResources(String ... classpathModelPaths) {
this.classpathModelPaths = classpathModelPaths;
return this;
@@ -84,22 +104,28 @@ public class CrankstartSetup extends Ext
return baseUrl;
}
- @Override
- protected void before() throws Throwable {
- if(crankstartThread != null) {
- log.debug("Already running");
- return;
- }
-
+ private static void cleanup() {
synchronized (toCleanup) {
- if(!toCleanup.isEmpty()) {
- log.info("Stopping other Crankstart instances before starting this one...");
+ if(toCleanup.isEmpty()) {
+ log.info("No Crankstart instances to cleanup");
+ return;
}
+ log.info("Stopping {} running Crankstart instances...", toCleanup.size());
for(CrankstartSetup s : toCleanup) {
s.stopCrankstartInstance();
}
toCleanup.clear();
}
+ }
+
+ @Override
+ protected void before() throws Throwable {
+ if(crankstartThread != null) {
+ log.debug("Already running");
+ return;
+ }
+
+ cleanup();
log.info("Starting {}", this);