From f86db0937b395c7fa96fa4bf4a29cc2c676fe3f5 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 25 Feb 2013 15:48:30 +0000 Subject: [PATCH] Provide SlcAgentFactory in the core agent git-svn-id: https://svn.argeo.org/slc/trunk@6085 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/spring/jcr-osgi.xml | 11 ---- .../META-INF/spring/agent.xml | 22 ++++--- .../META-INF/spring/common.xml | 14 ----- .../META-INF/spring/osgi.xml | 14 ++++- modules/org.argeo.slc.agent/agent.properties | 7 --- .../core/execution/DefaultAgentFactory.java | 59 +++++++++++++++++++ .../org/argeo/slc/jcr/SlcJcrConstants.java | 9 +-- .../main/java/org/argeo/slc/jcr/SlcNames.java | 17 ++++-- .../org/argeo/slc/jcr/execution/JcrAgent.java | 26 ++------ .../slc/jcr/execution/JcrProcessThread.java | 1 + 10 files changed, 105 insertions(+), 75 deletions(-) delete mode 100644 modules/org.argeo.slc.agent/META-INF/spring/common.xml create mode 100644 runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultAgentFactory.java diff --git a/modules/org.argeo.slc.agent.jcr/META-INF/spring/jcr-osgi.xml b/modules/org.argeo.slc.agent.jcr/META-INF/spring/jcr-osgi.xml index 9e2a0cbf4..f96930793 100644 --- a/modules/org.argeo.slc.agent.jcr/META-INF/spring/jcr-osgi.xml +++ b/modules/org.argeo.slc.agent.jcr/META-INF/spring/jcr-osgi.xml @@ -24,17 +24,6 @@ - - - - - - - - - - diff --git a/modules/org.argeo.slc.agent/META-INF/spring/agent.xml b/modules/org.argeo.slc.agent/META-INF/spring/agent.xml index bcb4d0a05..2afd8f580 100644 --- a/modules/org.argeo.slc.agent/META-INF/spring/agent.xml +++ b/modules/org.argeo.slc.agent/META-INF/spring/agent.xml @@ -4,6 +4,14 @@ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> + + + + osgibundle:agent.properties + + + @@ -15,16 +23,6 @@ - - - - - - - - - - + + \ No newline at end of file diff --git a/modules/org.argeo.slc.agent/META-INF/spring/common.xml b/modules/org.argeo.slc.agent/META-INF/spring/common.xml deleted file mode 100644 index 2a3f36cfb..000000000 --- a/modules/org.argeo.slc.agent/META-INF/spring/common.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - osgibundle:agent.properties - - - \ No newline at end of file diff --git a/modules/org.argeo.slc.agent/META-INF/spring/osgi.xml b/modules/org.argeo.slc.agent/META-INF/spring/osgi.xml index f0c8e5a48..1756f89ed 100644 --- a/modules/org.argeo.slc.agent/META-INF/spring/osgi.xml +++ b/modules/org.argeo.slc.agent/META-INF/spring/osgi.xml @@ -1,13 +1,12 @@ - - @@ -37,8 +36,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/org.argeo.slc.agent/agent.properties b/modules/org.argeo.slc.agent/agent.properties index ae0950c6c..4767d7c52 100644 --- a/modules/org.argeo.slc.agent/agent.properties +++ b/modules/org.argeo.slc.agent/agent.properties @@ -1,8 +1 @@ slc.agent.osgi.defaultTimeout=60000 - -# Disable LOG4J notification to the process -#slc.agent.log4Notification.disabled=false -# Notification level -#slc.agent.log4Notification.level= -# Do not log sub threads (those started by the process) -#slc.agent.log4Notification.onlyExecutionThread=false diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultAgentFactory.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultAgentFactory.java new file mode 100644 index 000000000..e80db1346 --- /dev/null +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultAgentFactory.java @@ -0,0 +1,59 @@ +/* + * 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.core.execution; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentFactory; + +/** Register agents (typically via OSGi listeners) */ +public class DefaultAgentFactory implements SlcAgentFactory { + private final static Log log = LogFactory.getLog(DefaultAgentFactory.class); + + private Map agents = new HashMap(); + + public SlcAgent getAgent(String uuid) { + if (agents.containsKey(uuid)) + return agents.get(uuid); + else + return null; + } + + public void pingAll(List activeAgentIds) { + for (SlcAgent agent : agents.values()) + agent.ping(); + } + + public synchronized void register(SlcAgent agent, + Map properties) { + agents.put(agent.getAgentUuid(), agent); + if (log.isDebugEnabled()) + log.debug("Agent " + agent.getAgentUuid() + " registered"); + } + + public synchronized void unregister(SlcAgent agent, + Map properties) { + agents.remove(agent.getAgentUuid()); + if (log.isDebugEnabled()) + log.debug("Agent " + agent.getAgentUuid() + " unregistered"); + } + +} diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrConstants.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrConstants.java index 4347c165e..179a081f4 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrConstants.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrConstants.java @@ -18,9 +18,10 @@ package org.argeo.slc.jcr; /** JCR related constants used across SLC */ public interface SlcJcrConstants { public final static String PROPERTY_PATH = "argeo.slc.jcr.path"; - + public final static String SLC_BASE_PATH = "/" + SlcNames.SLC_SYSTEM; - public final static String AGENTS_BASE_PATH = SLC_BASE_PATH + "/slc:agents"; - public final static String VM_AGENT_FACTORY_PATH = AGENTS_BASE_PATH - + "/slc:vm"; + public final static String AGENTS_BASE_PATH = SLC_BASE_PATH + "/" + + SlcNames.SLC_AGENTS; + public final static String VM_AGENT_FACTORY_PATH = AGENTS_BASE_PATH + "/" + + SlcNames.SLC_VM; } diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcNames.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcNames.java index 9e915984a..b0f12702f 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcNames.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcNames.java @@ -19,6 +19,9 @@ package org.argeo.slc.jcr; public interface SlcNames { public final static String SLC_ = "slc:"; + /* + * GENERAL + */ public final static String SLC_UUID = "slc:uuid"; public final static String SLC_STATUS = "slc:status"; // generic name for result parts of a given test result (slc:testResult) @@ -29,9 +32,7 @@ public interface SlcNames { // slc:check that aggregate status of all result parts of a given test // result public final static String SLC_AGGREGATED_STATUS = "slc:aggregatedStatus"; - - - + public final static String SLC_TYPE = "slc:type"; public final static String SLC_NAME = "slc:name"; public final static String SLC_VERSION = "slc:version"; @@ -39,14 +40,20 @@ public interface SlcNames { public final static String SLC_ADDRESS = "slc:address"; public final static String SLC_METADATA = "slc:metadata"; + public final static String SLC_TIMESTAMP = "slc:timestamp"; public final static String SLC_STARTED = "slc:started"; public final static String SLC_COMPLETED = "slc:completed"; + public final static String SLC_VM = "slc:vm"; + /* + * SLC RUNTIME + */ + // execution public final static String SLC_SPEC = "slc:spec"; public final static String SLC_EXECUTION_SPECS = "slc:executionSpecs"; public final static String SLC_FLOW = "slc:flow"; public final static String SLC_LOG = "slc:log"; - public final static String SLC_TIMESTAMP = "slc:timestamp"; + public final static String SLC_AGENTS = "slc:agents"; // spec attribute public final static String SLC_IS_IMMUTABLE = "slc:isImmutable"; @@ -72,7 +79,7 @@ public interface SlcNames { public final static String SLC_ISSUES = "slc:issues"; /* - * REPO + * SLC REPO */ // shared public final static String SLC_URL = "slc:url"; diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java index 751d8a97d..273a6ced2 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrAgent.java @@ -15,7 +15,6 @@ */ package org.argeo.slc.jcr.execution; -import java.util.List; import java.util.UUID; import javax.jcr.Node; @@ -32,15 +31,12 @@ 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 { +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 @@ -85,20 +81,6 @@ public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames (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 activeAgentIds) { - ping(); - } - /* * UTILITIES */ @@ -117,4 +99,8 @@ public class JcrAgent extends DefaultAgent implements SlcAgentFactory, SlcNames this.repository = repository; } + public void setAgentNodeName(String agentNodeName) { + this.agentNodeName = agentNodeName; + } + } diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java index 41353e052..e28c72750 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java @@ -1,4 +1,5 @@ /* + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); -- 2.39.2