]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java
Fix execution spec node added twice
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / execution / JcrAgent.java
index a096e5d5eebd6aa84b93a8ff94a5c1b926846f10..a7f5b7747543b8e6c6a4fd7687ab39693833f393 100644 (file)
@@ -1,36 +1,50 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.argeo.slc.jcr.execution;
 
-import java.util.List;
 import java.util.UUID;
 
 import javax.jcr.Node;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
+import org.argeo.slc.core.execution.DefaultAgent;
 import org.argeo.slc.core.execution.ProcessThread;
-import org.argeo.slc.core.runtime.DefaultAgent;
 import org.argeo.slc.execution.ExecutionModulesManager;
 import org.argeo.slc.execution.ExecutionProcess;
 import org.argeo.slc.jcr.SlcJcrConstants;
 import org.argeo.slc.jcr.SlcNames;
 import org.argeo.slc.jcr.SlcTypes;
-import org.argeo.slc.runtime.SlcAgent;
-import org.argeo.slc.runtime.SlcAgentFactory;
 
 /** SLC VM agent synchronizing with a JCR repository. */
-public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames {
-       private Session session;
+public class JcrAgent extends DefaultAgent implements SlcNames {
+       private Repository repository;
 
-       /** only one agent per VM is currently supported */
-       private final String agentNodeName = "default";
+       private String agentNodeName = "default";
 
        /*
         * LIFECYCLE
         */
        protected String initAgentUuid() {
+               Session session = null;
                try {
+                       session = repository.login();
                        Node vmAgentFactoryNode = JcrUtils.mkdirsSafe(session,
                                        SlcJcrConstants.VM_AGENT_FACTORY_PATH,
                                        SlcTypes.SLC_AGENT_FACTORY);
@@ -46,11 +60,14 @@ public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames
                } catch (RepositoryException e) {
                        JcrUtils.discardQuietly(session);
                        throw new SlcException("Cannot find JCR agent UUID", e);
+               } finally {
+                       JcrUtils.logoutQuietly(session);
                }
        }
 
-       public void dispose() {
-
+       @Override
+       public void destroy() {
+               super.destroy();
        }
 
        /*
@@ -60,22 +77,12 @@ public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames
        protected ProcessThread createProcessThread(
                        ThreadGroup processesThreadGroup,
                        ExecutionModulesManager modulesManager, ExecutionProcess process) {
-               return new JcrProcessThread(processesThreadGroup, modulesManager,
-                               (JcrExecutionProcess) process);
-       }
-
-       /*
-        * SLC AGENT FACTORY
-        */
-       public SlcAgent getAgent(String uuid) {
-               if (!uuid.equals(getAgentUuid()))
-                       throw new SlcException("Internal UUID " + getAgentUuid()
-                                       + " is different from argument UUID " + uuid);
-               return this;
-       }
-
-       public void pingAll(List<String> activeAgentIds) {
-               ping();
+               if (process instanceof JcrProcessThread)
+                       return new JcrProcessThread(processesThreadGroup, modulesManager,
+                                       (JcrExecutionProcess) process);
+               else
+                       return super.createProcessThread(processesThreadGroup,
+                                       modulesManager, process);
        }
 
        /*
@@ -88,12 +95,16 @@ public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames
        /*
         * BEAN
         */
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
        public String getAgentNodeName() {
                return agentNodeName;
        }
 
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
+       public void setAgentNodeName(String agentNodeName) {
+               this.agentNodeName = agentNodeName;
+       }
+
 }