3 * Copyright (C) 2007-2012 Argeo GmbH
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 package org
.argeo
.slc
.jcr
.execution
;
19 import java
.util
.List
;
21 import javax
.jcr
.Node
;
22 import javax
.jcr
.RepositoryException
;
23 import javax
.jcr
.Session
;
25 import org
.argeo
.ArgeoException
;
26 import org
.argeo
.jcr
.JcrUtils
;
27 import org
.argeo
.slc
.core
.execution
.ProcessThread
;
28 import org
.argeo
.slc
.execution
.ExecutionModulesManager
;
29 import org
.argeo
.slc
.execution
.ExecutionProcess
;
30 import org
.argeo
.slc
.execution
.RealizedFlow
;
31 import org
.argeo
.slc
.jcr
.SlcNames
;
33 /** Where the actual execution takes place */
34 public class JcrProcessThread
extends ProcessThread
implements SlcNames
{
36 public JcrProcessThread(ThreadGroup processesThreadGroup
,
37 ExecutionModulesManager executionModulesManager
,
38 JcrExecutionProcess process
) {
39 super(processesThreadGroup
, executionModulesManager
, process
);
43 protected void process() throws InterruptedException
{
44 Session session
= null;
46 session
= getJcrExecutionProcess().getRepository().login();
48 List
<RealizedFlow
> realizedFlows
= getProcess().getRealizedFlows();
49 for (RealizedFlow realizedFlow
: realizedFlows
) {
50 Node realizedFlowNode
= session
51 .getNode(((JcrRealizedFlow
) realizedFlow
).getPath());
53 // set status on realized flow
54 realizedFlowNode
.setProperty(SLC_STATUS
,
55 ExecutionProcess
.RUNNING
);
56 realizedFlowNode
.getSession().save();
61 execute(realizedFlow
, true);
63 // set status on realized flow
64 realizedFlowNode
.setProperty(SLC_STATUS
,
65 ExecutionProcess
.COMPLETED
);
66 realizedFlowNode
.getSession().save();
67 } catch (RepositoryException e
) {
69 } catch (InterruptedException e
) {
70 // set status on realized flow
71 realizedFlowNode
.setProperty(SLC_STATUS
,
72 ExecutionProcess
.KILLED
);
73 realizedFlowNode
.getSession().save();
75 } catch (RuntimeException e
) {
76 // set status on realized flow
77 realizedFlowNode
.setProperty(SLC_STATUS
,
78 ExecutionProcess
.ERROR
);
79 realizedFlowNode
.getSession().save();
83 } catch (RepositoryException e
) {
84 throw new ArgeoException("Cannot process "
85 + getJcrExecutionProcess().getNodePath(), e
);
87 JcrUtils
.logoutQuietly(session
);
92 // /** CONFIGURE THE REALIZED FLOWS */
93 // PROTECTED VOID EXECUTE(NODE REALIZEDFLOWNODE) THROWS REPOSITORYEXCEPTION,
94 // INTERRUPTEDEXCEPTION {
95 // IF (REALIZEDFLOWNODE.HASNODE(SLC_ADDRESS)) {
96 // STRING FLOWPATH = REALIZEDFLOWNODE.GETNODE(SLC_ADDRESS)
97 // .GETPROPERTY(PROPERTY.JCR_PATH).GETSTRING();
98 // // TODO: CONVERT TO LOCAL PATH IF REMOTE
100 // NODE FLOWNODE = REALIZEDFLOWNODE.GETSESSION().GETNODE(FLOWPATH);
101 // STRING FLOWNAME = FLOWNODE.GETPROPERTY(SLC_NAME).GETSTRING();
103 // NODE EXECUTIONMODULENODE = FLOWNODE.GETSESSION().GETNODE(
104 // SLCJCRUTILS.MODULEPATH(FLOWPATH));
105 // STRING EXECUTIONMODULENAME = EXECUTIONMODULENODE.GETPROPERTY(
106 // SLC_NAME).GETSTRING();
107 // STRING EXECUTIONMODULEVERSION = EXECUTIONMODULENODE.GETPROPERTY(
108 // SLC_VERSION).GETSTRING();
110 // REALIZEDFLOW REALIZEDFLOW = NEW REALIZEDFLOW();
111 // REALIZEDFLOW.SETMODULENAME(EXECUTIONMODULENAME);
112 // REALIZEDFLOW.SETMODULEVERSION(EXECUTIONMODULEVERSION);
114 // // RETRIEVE EXECUTION SPEC
115 // DEFAULTEXECUTIONSPEC EXECUTIONSPEC = NEW DEFAULTEXECUTIONSPEC();
116 // MAP<STRING, EXECUTIONSPECATTRIBUTE> ATTRS =
117 // READEXECUTIONSPECATTRIBUTES(REALIZEDFLOWNODE);
118 // EXECUTIONSPEC.SETATTRIBUTES(ATTRS);
120 // // SET EXECUTION SPEC NAME
121 // IF (FLOWNODE.HASPROPERTY(SLCNAMES.SLC_SPEC)) {
122 // NODE EXECUTIONSPECNODE = FLOWNODE.GETPROPERTY(SLC_SPEC)
124 // EXECUTIONSPEC.SETBEANNAME(EXECUTIONSPECNODE.GETPROPERTY(
125 // SLC_NAME).GETSTRING());
128 // // EXPLICITLY RETRIEVE VALUES
129 // MAP<STRING, OBJECT> VALUES = NEW HASHMAP<STRING, OBJECT>();
130 // FOR (STRING ATTRNAME : ATTRS.KEYSET()) {
131 // EXECUTIONSPECATTRIBUTE ATTR = ATTRS.GET(ATTRNAME);
132 // OBJECT VALUE = ATTR.GETVALUE();
133 // VALUES.PUT(ATTRNAME, VALUE);
136 // EXECUTIONFLOWDESCRIPTOR EFD = NEW EXECUTIONFLOWDESCRIPTOR(FLOWNAME,
137 // VALUES, EXECUTIONSPEC);
138 // REALIZEDFLOW.SETFLOWDESCRIPTOR(EFD);
141 // // EXECUTE THE FLOW
143 // EXECUTE(REALIZEDFLOW, TRUE);
148 // PROTECTED MAP<STRING, EXECUTIONSPECATTRIBUTE>
149 // READEXECUTIONSPECATTRIBUTES(
152 // MAP<STRING, EXECUTIONSPECATTRIBUTE> ATTRS = NEW HASHMAP<STRING,
153 // EXECUTIONSPECATTRIBUTE>();
154 // FOR (NODEITERATOR NIT = NODE.GETNODES(); NIT.HASNEXT();) {
155 // NODE SPECATTRNODE = NIT.NEXTNODE();
157 // .ISNODETYPE(SLCTYPES.SLC_PRIMITIVE_SPEC_ATTRIBUTE)) {
158 // STRING TYPE = SPECATTRNODE.GETPROPERTY(SLC_TYPE)
160 // OBJECT VALUE = NULL;
161 // IF (SPECATTRNODE.HASPROPERTY(SLC_VALUE)) {
162 // STRING VALUESTR = SPECATTRNODE.GETPROPERTY(SLC_VALUE)
164 // VALUE = PRIMITIVEUTILS.CONVERT(TYPE, VALUESTR);
166 // PRIMITIVESPECATTRIBUTE SPECATTR = NEW PRIMITIVESPECATTRIBUTE(
168 // ATTRS.PUT(SPECATTRNODE.GETNAME(), SPECATTR);
169 // } ELSE IF (SPECATTRNODE
170 // .ISNODETYPE(SLCTYPES.SLC_REF_SPEC_ATTRIBUTE)) {
171 // IF (!SPECATTRNODE.HASPROPERTY(SLC_VALUE)) {
174 // INTEGER VALUE = (INT) SPECATTRNODE.GETPROPERTY(SLC_VALUE)
176 // REFSPECATTRIBUTE SPECATTR = NEW REFSPECATTRIBUTE();
177 // NODEITERATOR CHILDREN = SPECATTRNODE.GETNODES();
180 // WHILE (CHILDREN.HASNEXT()) {
181 // NODE CHILD = CHILDREN.NEXTNODE();
182 // IF (INDEX == VALUE)
183 // ID = CHILD.GETNAME();
186 // SPECATTR.SETVALUE(ID);
187 // ATTRS.PUT(SPECATTRNODE.GETNAME(), SPECATTR);
189 // // THROW NEW SLCEXCEPTION("UNSUPPORTED SPEC ATTRIBUTE "
190 // // + SPECATTRNODE);
193 // } CATCH (REPOSITORYEXCEPTION E) {
194 // THROW NEW SLCEXCEPTION("CANNOT READ SPEC ATTRIBUTES FROM " + NODE,
199 protected JcrExecutionProcess
getJcrExecutionProcess() {
200 return (JcrExecutionProcess
) getProcess();