1 package org
.argeo
.slc
.jcr
.execution
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Session
;
9 import org
.argeo
.api
.NodeConstants
;
10 import org
.argeo
.jcr
.JcrUtils
;
11 import org
.argeo
.slc
.SlcException
;
12 import org
.argeo
.slc
.SlcNames
;
13 import org
.argeo
.slc
.execution
.ExecutionModulesManager
;
14 import org
.argeo
.slc
.execution
.ExecutionProcess
;
15 import org
.argeo
.slc
.execution
.RealizedFlow
;
16 import org
.argeo
.slc
.runtime
.ProcessThread
;
18 /** Where the actual execution takes place */
19 public class JcrProcessThread
extends ProcessThread
implements SlcNames
{
21 public JcrProcessThread(ThreadGroup processesThreadGroup
, ExecutionModulesManager executionModulesManager
,
22 JcrExecutionProcess process
) {
23 super(processesThreadGroup
, executionModulesManager
, process
);
26 /** Overridden in order to set progress status on realized flow nodes. */
28 protected void process() throws InterruptedException
{
29 Session session
= null;
30 if (getProcess() instanceof JcrExecutionProcess
)
32 session
= ((JcrExecutionProcess
) getProcess()).getRepository().login(NodeConstants
.HOME_WORKSPACE
);
34 List
<RealizedFlow
> realizedFlows
= getProcess().getRealizedFlows();
35 for (RealizedFlow realizedFlow
: realizedFlows
) {
36 Node realizedFlowNode
= session
.getNode(((JcrRealizedFlow
) realizedFlow
).getPath());
37 setFlowStatus(realizedFlowNode
, ExecutionProcess
.RUNNING
);
43 execute(realizedFlow
, true);
45 setFlowStatus(realizedFlowNode
, ExecutionProcess
.COMPLETED
);
46 } catch (RepositoryException e
) {
48 } catch (InterruptedException e
) {
49 setFlowStatus(realizedFlowNode
, ExecutionProcess
.KILLED
);
51 } catch (RuntimeException e
) {
52 setFlowStatus(realizedFlowNode
, ExecutionProcess
.ERROR
);
56 } catch (RepositoryException e
) {
57 throw new SlcException("Cannot process " + getJcrExecutionProcess().getNodePath(), e
);
59 JcrUtils
.logoutQuietly(session
);
65 protected void setFlowStatus(Node realizedFlowNode
, String status
) throws RepositoryException
{
66 realizedFlowNode
.setProperty(SLC_STATUS
, status
);
67 realizedFlowNode
.getSession().save();
70 protected JcrExecutionProcess
getJcrExecutionProcess() {
71 return (JcrExecutionProcess
) getProcess();