1 package org
.argeo
.slc
.jcr
.execution
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
11 import org
.argeo
.jcr
.JcrUtils
;
12 import org
.argeo
.slc
.SlcException
;
13 import org
.argeo
.slc
.core
.execution
.ProcessThread
;
14 import org
.argeo
.slc
.core
.runtime
.DefaultAgent
;
15 import org
.argeo
.slc
.execution
.ExecutionModulesManager
;
16 import org
.argeo
.slc
.execution
.ExecutionProcess
;
17 import org
.argeo
.slc
.jcr
.SlcJcrConstants
;
18 import org
.argeo
.slc
.jcr
.SlcNames
;
19 import org
.argeo
.slc
.jcr
.SlcTypes
;
20 import org
.argeo
.slc
.runtime
.SlcAgent
;
21 import org
.argeo
.slc
.runtime
.SlcAgentFactory
;
23 /** SLC VM agent synchronizing with a JCR repository. */
24 public class JcrAgent
extends DefaultAgent
implements SlcAgentFactory
, SlcNames
{
25 private Repository repository
;
27 /** only one agent per VM is currently supported */
28 private final String agentNodeName
= "default";
33 protected String
initAgentUuid() {
34 Session session
= null;
36 session
= repository
.login();
37 Node vmAgentFactoryNode
= JcrUtils
.mkdirsSafe(session
,
38 SlcJcrConstants
.VM_AGENT_FACTORY_PATH
,
39 SlcTypes
.SLC_AGENT_FACTORY
);
40 if (!vmAgentFactoryNode
.hasNode(agentNodeName
)) {
41 String uuid
= UUID
.randomUUID().toString();
42 Node agentNode
= vmAgentFactoryNode
.addNode(agentNodeName
,
44 agentNode
.setProperty(SLC_UUID
, uuid
);
47 return vmAgentFactoryNode
.getNode(agentNodeName
)
48 .getProperty(SLC_UUID
).getString();
49 } catch (RepositoryException e
) {
50 JcrUtils
.discardQuietly(session
);
51 throw new SlcException("Cannot find JCR agent UUID", e
);
53 JcrUtils
.logoutQuietly(session
);
58 public void destroy() {
66 protected ProcessThread
createProcessThread(
67 ThreadGroup processesThreadGroup
,
68 ExecutionModulesManager modulesManager
, ExecutionProcess process
) {
69 return new JcrProcessThread(processesThreadGroup
, modulesManager
,
70 (JcrExecutionProcess
) process
);
76 public SlcAgent
getAgent(String uuid
) {
77 if (!uuid
.equals(getAgentUuid()))
78 throw new SlcException("Internal UUID " + getAgentUuid()
79 + " is different from argument UUID " + uuid
);
83 public void pingAll(List
<String
> activeAgentIds
) {
90 public String
getNodePath() {
91 return SlcJcrConstants
.VM_AGENT_FACTORY_PATH
+ '/' + getAgentNodeName();
97 public String
getAgentNodeName() {
101 public void setRepository(Repository repository
) {
102 this.repository
= repository
;