\r
<service interface="org.argeo.slc.execution.ExecutionModulesListener"\r
ref="executionModulesListener" />\r
- <service ref="agent" interface="org.argeo.slc.runtime.SlcAgentFactory">\r
- <service-properties>\r
- <beans:entry>\r
- <beans:key>\r
- <util:constant static-field="org.argeo.slc.jcr.SlcJcrConstants.PROPERTY_PATH" />\r
- </beans:key>\r
- <util:constant\r
- static-field="org.argeo.slc.jcr.SlcJcrConstants.VM_AGENT_FACTORY_PATH" />\r
- </beans:entry>\r
- </service-properties>\r
- </service>\r
<service ref="agent" interface="org.argeo.slc.runtime.SlcAgent" />\r
\r
<service ref="fileSystemManager" interface="org.apache.commons.vfs.FileSystemManager" />\r
xsi:schemaLocation="\r
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
\r
+ <bean\r
+ class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">\r
+ <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />\r
+ <property name="locations">\r
+ <value>osgibundle:agent.properties</value>\r
+ </property>\r
+ </bean>\r
+\r
<!-- Manager -->\r
<bean id="modulesManager" class="org.argeo.slc.osgi.OsgiExecutionModulesManager"\r
init-method="init" destroy-method="destroy">\r
<property name="defaultTimeout" value="${slc.agent.osgi.defaultTimeout}" />\r
</bean>\r
\r
- <!-- Logging -->\r
- <!-- <bean id="log4Notification" class="org.argeo.slc.log4j.SlcExecutionAppender" -->\r
- <!-- init-method="init" destroy-method="destroy"> -->\r
- <!-- <property name="disabled" value="${slc.agent.log4Notification.disabled}" \r
- /> -->\r
- <!-- <property name="level" value="${slc.agent.log4Notification.level}" \r
- /> -->\r
- <!-- <property name="onlyExecutionThread" -->\r
- <!-- value="${slc.agent.log4Notification.onlyExecutionThread}" /> -->\r
- <!-- </bean> -->\r
-\r
-\r
+ <!-- Agent Factory -->\r
+ <bean id="vmAgentFactory" class="org.argeo.slc.core.execution.DefaultAgentFactory" />\r
</beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
- default-lazy-init="false">
-
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
- <property name="locations">
- <value>osgibundle:agent.properties</value>
- </property>
- </bean>
-</beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+ xmlns:util="http://www.springframework.org/schema/util"\r
xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
http://www.springframework.org/schema/beans \r
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
\r
- <!-- <beans:import resource="classpath:org/argeo/slc/osgi/manager.xml" /> -->\r
-\r
<!-- REFERENCES -->\r
<list id="executionContexts" interface="org.argeo.slc.execution.ExecutionContext"\r
cardinality="0..N">\r
<list id="slcExecutionListeners" interface="org.argeo.slc.process.SlcExecutionNotifier"\r
cardinality="0..N" />\r
\r
+ <list id="agents" interface="org.argeo.slc.runtime.SlcAgent"\r
+ cardinality="0..N">\r
+ <listener ref="vmAgentFactory" bind-method="register"\r
+ unbind-method="unregister" />\r
+ </list>\r
+\r
<!-- SERVICES -->\r
<service ref="modulesManager" interface="org.argeo.slc.execution.ExecutionModulesManager" />\r
\r
+ <service ref="vmAgentFactory" interface="org.argeo.slc.runtime.SlcAgentFactory">\r
+ <service-properties>\r
+ <beans:entry key="argeo.slc.jcr.path" value="/slc:system/slc:agents/slc:vm" />\r
+ </service-properties>\r
+ </service>\r
\r
</beans:beans>
\ No newline at end of file
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
--- /dev/null
+/*
+ * 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<String, SlcAgent> agents = new HashMap<String, SlcAgent>();
+
+ public SlcAgent getAgent(String uuid) {
+ if (agents.containsKey(uuid))
+ return agents.get(uuid);
+ else
+ return null;
+ }
+
+ public void pingAll(List<String> activeAgentIds) {
+ for (SlcAgent agent : agents.values())
+ agent.ping();
+ }
+
+ public synchronized void register(SlcAgent agent,
+ Map<String, String> properties) {
+ agents.put(agent.getAgentUuid(), agent);
+ if (log.isDebugEnabled())
+ log.debug("Agent " + agent.getAgentUuid() + " registered");
+ }
+
+ public synchronized void unregister(SlcAgent agent,
+ Map<String, String> properties) {
+ agents.remove(agent.getAgentUuid());
+ if (log.isDebugEnabled())
+ log.debug("Agent " + agent.getAgentUuid() + " unregistered");
+ }
+
+}
/** 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;
}
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)
// 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";
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";
public final static String SLC_ISSUES = "slc:issues";
/*
- * REPO
+ * SLC REPO
*/
// shared
public final static String SLC_URL = "slc:url";
*/
package org.argeo.slc.jcr.execution;
-import java.util.List;
import java.util.UUID;
import javax.jcr.Node;
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
(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();
- }
-
/*
* UTILITIES
*/
this.repository = repository;
}
+ public void setAgentNodeName(String agentNodeName) {
+ this.agentNodeName = agentNodeName;
+ }
+
}
/*
+
* Copyright (C) 2007-2012 Argeo GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");