]> 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
Fix special characters in JCR logging
[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.Repository;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Session;
10
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;
22
23 /** SLC VM agent synchronizing with a JCR repository. */
24 public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames {
25 private Repository repository;
26
27 /** only one agent per VM is currently supported */
28 private final String agentNodeName = "default";
29
30 /*
31 * LIFECYCLE
32 */
33 protected String initAgentUuid() {
34 Session session = null;
35 try {
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,
43 SlcTypes.SLC_AGENT);
44 agentNode.setProperty(SLC_UUID, uuid);
45 }
46 session.save();
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);
52 } finally {
53 JcrUtils.logoutQuietly(session);
54 }
55 }
56
57 @Override
58 public void destroy() {
59 super.destroy();
60 }
61
62 /*
63 * SLC AGENT
64 */
65 @Override
66 protected ProcessThread createProcessThread(
67 ThreadGroup processesThreadGroup,
68 ExecutionModulesManager modulesManager, ExecutionProcess process) {
69 return new JcrProcessThread(processesThreadGroup, modulesManager,
70 (JcrExecutionProcess) process);
71 }
72
73 /*
74 * SLC AGENT FACTORY
75 */
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);
80 return this;
81 }
82
83 public void pingAll(List<String> activeAgentIds) {
84 ping();
85 }
86
87 /*
88 * UTILITIES
89 */
90 public String getNodePath() {
91 return SlcJcrConstants.VM_AGENT_FACTORY_PATH + '/' + getAgentNodeName();
92 }
93
94 /*
95 * BEAN
96 */
97 public String getAgentNodeName() {
98 return agentNodeName;
99 }
100
101 public void setRepository(Repository repository) {
102 this.repository = repository;
103 }
104
105 }