1 package org
.argeo
.slc
.jcr
.execution
;
7 import javax
.jcr
.RepositoryException
;
8 import javax
.jcr
.Session
;
10 import org
.argeo
.jcr
.JcrUtils
;
11 import org
.argeo
.slc
.SlcException
;
12 import org
.argeo
.slc
.core
.execution
.ProcessThread
;
13 import org
.argeo
.slc
.core
.runtime
.DefaultAgent
;
14 import org
.argeo
.slc
.execution
.ExecutionModulesManager
;
15 import org
.argeo
.slc
.execution
.ExecutionProcess
;
16 import org
.argeo
.slc
.jcr
.SlcJcrConstants
;
17 import org
.argeo
.slc
.jcr
.SlcNames
;
18 import org
.argeo
.slc
.jcr
.SlcTypes
;
19 import org
.argeo
.slc
.runtime
.SlcAgent
;
20 import org
.argeo
.slc
.runtime
.SlcAgentFactory
;
22 /** SLC VM agent synchronizing with a JCR repository. */
23 public class JcrAgent
extends DefaultAgent
implements SlcAgentFactory
, SlcNames
{
24 private Session session
;
26 /** only one agent per VM is currently supported */
27 private final String agentNodeName
= "default";
32 protected String
initAgentUuid() {
34 Node vmAgentFactoryNode
= JcrUtils
.mkdirs(session
,
35 SlcJcrConstants
.VM_AGENT_FACTORY_PATH
,
36 SlcTypes
.SLC_AGENT_FACTORY
);
37 if (!vmAgentFactoryNode
.hasNode(agentNodeName
)) {
38 String uuid
= UUID
.randomUUID().toString();
39 Node agentNode
= vmAgentFactoryNode
.addNode(agentNodeName
,
41 agentNode
.setProperty(SLC_UUID
, uuid
);
44 return vmAgentFactoryNode
.getNode(agentNodeName
)
45 .getProperty(SLC_UUID
).getString();
46 } catch (RepositoryException e
) {
47 JcrUtils
.discardQuietly(session
);
48 throw new SlcException("Cannot find JCR agent UUID", e
);
52 public void dispose() {
60 protected ProcessThread
createProcessThread(
61 ThreadGroup processesThreadGroup
,
62 ExecutionModulesManager modulesManager
, ExecutionProcess process
) {
63 return new JcrProcessThread(processesThreadGroup
, modulesManager
,
64 (JcrExecutionProcess
) process
);
70 public SlcAgent
getAgent(String uuid
) {
71 if (!uuid
.equals(getAgentUuid()))
72 throw new SlcException("Internal UUID " + getAgentUuid()
73 + " is different from argument UUID " + uuid
);
77 public void pingAll(List
<String
> activeAgentIds
) {
84 public String
getNodePath() {
85 return SlcJcrConstants
.VM_AGENT_FACTORY_PATH
+ '/' + getAgentNodeName();
91 public void setSession(Session session
) {
92 this.session
= session
;
95 public String
getAgentNodeName() {