]> 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
Save current state even if not completely stable
[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 ThreadGroup processesThreadGroup,
62 ExecutionModulesManager modulesManager, ExecutionProcess process) {
63 return new JcrProcessThread(processesThreadGroup, modulesManager,
64 (JcrExecutionProcess) process);
65 }
66
67 /*
68 * SLC AGENT FACTORY
69 */
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);
74 return this;
75 }
76
77 public void pingAll(List<String> activeAgentIds) {
78 ping();
79 }
80
81 /*
82 * UTILITIES
83 */
84 public String getNodePath() {
85 return SlcJcrConstants.VM_AGENT_FACTORY_PATH + '/' + getAgentNodeName();
86 }
87
88 /*
89 * BEAN
90 */
91 public void setSession(Session session) {
92 this.session = session;
93 }
94
95 public String getAgentNodeName() {
96 return agentNodeName;
97 }
98
99 }