]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java
Primitive arguments working
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / execution / JcrAgent.java
1 package org.argeo.slc.jcr.execution;
2
3 import java.util.List;
4 import java.util.UUID;
5
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.Session;
9
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;
21
22 /** SLC VM agent synchronizing with a JCR repository. */
23 public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames {
24 private Session session;
25
26 /** only one agent per VM is currently supported */
27 private final String agentNodeName = "default";
28
29 /*
30 * LIFECYCLE
31 */
32 protected String initAgentUuid() {
33 try {
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,
40 SlcTypes.SLC_AGENT);
41 agentNode.setProperty(SLC_UUID, uuid);
42 }
43 session.save();
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);
49 }
50 }
51
52 public void dispose() {
53
54 }
55
56 /*
57 * SLC AGENT
58 */
59 @Override
60 protected ProcessThread createProcessThread(
61 ExecutionModulesManager modulesManager, ExecutionProcess process) {
62 return new JcrProcessThread(modulesManager,
63 (JcrExecutionProcess) process);
64 }
65
66 /*
67 * SLC AGENT FACTORY
68 */
69 public SlcAgent getAgent(String uuid) {
70 if (!uuid.equals(getAgentUuid()))
71 throw new SlcException("Internal UUID " + getAgentUuid()
72 + " is different from argument UUID " + uuid);
73 return this;
74 }
75
76 public void pingAll(List<String> activeAgentIds) {
77 ping();
78 }
79
80 /*
81 * UTILITIES
82 */
83 public String getNodePath() {
84 return SlcJcrConstants.VM_AGENT_FACTORY_PATH + '/' + getAgentNodeName();
85 }
86
87 /*
88 * BEAN
89 */
90 public void setSession(Session session) {
91 this.session = session;
92 }
93
94 public String getAgentNodeName() {
95 return agentNodeName;
96 }
97
98 }