log4j.logger.org.springframework.web.servlet.PageNotFound=ERROR
log4j.logger.org.argeo.server.webextender.TomcatDeployer=WARN
+#log4j.logger.org.apache=DEBUG
+#log4j.logger.org.springframework.security=DEBUG
+
log4j.logger.org.apache.coyote=INFO
log4j.logger.org.apache.catalina.core.ContainerBase=INFO
log4j.logger.org.apache.directory.server=ERROR
org.argeo.slc.agent.jcr,\
org.argeo.slc.support.maven,\
org.argeo.slc.server.repo,\
+org.argeo.dep.osgi.catalina.start,\
+org.springframework.osgi.web.extender,\
+org.argeo.jackrabbit.webapp,\
# Start internal web server
#org.argeo.dep.osgi.catalina.start,\
import org.argeo.slc.execution.ExecutionSpecAttribute;
import org.argeo.slc.execution.ExecutionStack;
+/** Canonical implementation of an execution stack. */
public class DefaultExecutionStack implements ExecutionStack {
private final static Log log = LogFactory
}
public void registerDestructionCallback(String name, Runnable callback) {
- // TODO: implement it
- // throw new UnsupportedOperationException();
+ if (Thread.currentThread() instanceof ExecutionThread) {
+ ExecutionThread executionThread = (ExecutionThread) Thread
+ .currentThread();
+ executionThread.registerDestructionCallback(name, callback);
+ }
}
public Object remove(String name) {
*/
package org.argeo.slc.core.execution;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.slc.SlcException;
private final RealizedFlow realizedFlow;
private final ProcessThread processThread;
+ private List<Runnable> destructionCallbacks = new ArrayList<Runnable>();
+
public ExecutionThread(ProcessThread processThread,
RealizedFlow realizedFlow) {
super(processThread.getProcessThreadGroup(), "Flow "
throw new SlcException("Can only execute authenticated threads");
SecurityContextHolder.getContext().setAuthentication(authentication);
- if (getContextClassLoader() != null) {
- if (log.isTraceEnabled())
- log.trace("Context class loader set to "
- + getContextClassLoader());
- }
-
// Retrieve execution flow descriptor
ExecutionFlowDescriptor executionFlowDescriptor = realizedFlow
.getFlowDescriptor();
processThread.flowCompleted();
dispatchAddStep(new ExecutionStep(realizedFlow.getModuleName(),
ExecutionStep.PHASE_END, "Flow " + flowName));
+ processDestructionCallbacks();
}
}
processThread.getProcessThreadGroup().dispatchAddStep(step);
}
+ private synchronized void processDestructionCallbacks() {
+ for (int i = destructionCallbacks.size() - 1; i >= 0; i--) {
+ try {
+ destructionCallbacks.get(i).run();
+ } catch (Exception e) {
+ log.warn("Could not process destruction callback " + i
+ + " in thread " + getName(), e);
+ }
+ }
+ }
+
+ /**
+ * Gather object destruction callback to be called in reverse order at the
+ * end of the thread
+ */
+ synchronized void registerDestructionCallback(String name, Runnable callback) {
+ destructionCallbacks.add(callback);
+ }
+
protected ProcessThreadGroup getProcessThreadGroup() {
return processThread.getProcessThreadGroup();
}
*/
package org.argeo.slc.execution;
+/** Deal with nested level of executions using different vartiables. */
public interface ExecutionStack {
/**
* @param name
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.jcr.JcrUtils;
import org.argeo.slc.SlcException;
import org.argeo.slc.core.attachment.Attachment;
* {@link SlcTypes#SLC_TEST_RESULT}.
*/
public class JcrTestResult implements TestResult, SlcNames, AttachmentsEnabled {
+ private final static Log log = LogFactory.getLog(JcrTestResult.class);
+
/** Should only be set for an already existing result. */
private String uuid;
private Repository repository;
resultNode.setProperty(property, attributes.get(attr));
}
session.save();
+ if (log.isDebugEnabled())
+ log.debug("Created test result " + uuid);
}
} catch (Exception e) {
JcrUtils.discardQuietly(session);
public void destroy() {
JcrUtils.logoutQuietly(session);
+ if (log.isTraceEnabled())
+ log.trace("Logged out session for result " + uuid);
}
public Node getNode() {
}
public void notifyTestRun(TestRun testRun) {
+ // TODO store meta data about the test running
+ // if (log.isDebugEnabled())
+ // log.debug("Running test "
+ // + testRun.getTestDefinition().getClass().getName() + "...");
}
public void addResultPart(TestResultPart testResultPart) {
public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
-
- // public void setLogoutWhenDestroyed(Boolean logoutWhenDestroyed) {
- // this.logoutWhenDestroyed = logoutWhenDestroyed;
- // }
-
}