From cebfbf8efbf6a6b99a543bd309d2976478123989 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 27 Apr 2009 05:58:39 +0000 Subject: [PATCH] Communicate with the agent via JMS git-svn-id: https://svn.argeo.org/slc/trunk@2375 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- demo/pom.xml | 6 +- .../META-INF/spring/jms.xml | 11 ++ runtime/org.argeo.slc.server/pom.xml | 2 +- .../mvc/execution/GetModuleDescriptor.java | 16 ++- .../mvc/execution/ListModulesDescriptors.java | 22 ++- .../slc/server/spring/slc-service-servlet.xml | 4 +- .../java/org/argeo/slc/runtime/SlcAgent.java | 9 ++ .../argeo/slc/runtime/SlcAgentDescriptor.java | 26 +++- .../argeo/slc/runtime/SlcAgentFactory.java | 5 + .../main/java/org/argeo/slc/jms/JmsAgent.java | 83 +++++++++++- .../java/org/argeo/slc/jms/JmsAgentProxy.java | 128 ++++++++++++++++++ .../argeo/slc/jms/JmsAgentProxyFactory.java | 37 +++++ .../slc/jms/MarshallerMessageConverter.java | 3 +- .../org/argeo/slc/activemq/destinations.xml | 4 + .../resources/org/argeo/slc/castor/msg.xml | 2 +- .../org/argeo/slc/castor/runtime.xml | 4 + .../ExecutionModuleDescriptorCastorTest.java | 9 ++ .../castor/SlcAgentDescriptorCastorTest.java | 38 ++++++ .../argeo/slc/core/runtime/AbstractAgent.java | 35 +---- .../org/argeo/slc/ria/NewLauncherApplet.js | 7 +- .../slc/class/org/argeo/slc/ria/SlcApi.js | 3 +- .../META-INF/MANIFEST.MF | 1 + .../META-INF/spring/jms-osgi.xml | 1 + .../META-INF/spring/jms.xml | 12 ++ .../org.argeo.slc.webapp.war/WEB-INF/osgi.xml | 2 + 25 files changed, 403 insertions(+), 67 deletions(-) create mode 100644 runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentFactory.java create mode 100644 runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java create mode 100644 runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxyFactory.java create mode 100644 runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/SlcAgentDescriptorCastorTest.java diff --git a/demo/pom.xml b/demo/pom.xml index 4b4edb608..1ba3ac654 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -21,7 +21,7 @@ maven-argeo-osgi-plugin - ${basedir}/site;in=*;ex=**/.svn/** + ${basedir}/site;in=*;ex=**/.svn/**,${basedir}/../server/org.argeo.slc.siteserver/bundles;in=*;ex=**/.svn/** @@ -58,7 +58,7 @@ target/exec/server -Xmx256m - + @@ -94,7 +94,7 @@ target/exec/agent -Xmx128m - + diff --git a/demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml b/demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml index 06efcebfe..16060cc69 100644 --- a/demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml +++ b/demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml @@ -7,6 +7,16 @@ + + + + + + + + + @@ -28,6 +38,7 @@ + diff --git a/runtime/org.argeo.slc.server/pom.xml b/runtime/org.argeo.slc.server/pom.xml index c60ae13af..2c5925ddf 100644 --- a/runtime/org.argeo.slc.server/pom.xml +++ b/runtime/org.argeo.slc.server/pom.xml @@ -34,7 +34,7 @@ org.argeo.slc.*,org.argeo.slc.server,org.argeo.slc.server.spring - org.w3c.dom;version="0.0.0",javax.xml.*;version="0.0.0",org.argeo.slc.activemq,* + org.w3c.dom;version="0.0.0",javax.xml.*;version="0.0.0",org.argeo.slc.activemq,org.argeo.slc.execution,* diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/GetModuleDescriptor.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/GetModuleDescriptor.java index b6a64b2ef..dba327177 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/GetModuleDescriptor.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/GetModuleDescriptor.java @@ -4,29 +4,33 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.argeo.slc.execution.ExecutionModuleDescriptor; -import org.argeo.slc.execution.ExecutionModulesManager; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentFactory; import org.argeo.slc.web.mvc.AbstractServiceController; import org.springframework.web.servlet.ModelAndView; /** . */ public class GetModuleDescriptor extends AbstractServiceController { - private ExecutionModulesManager modulesManager; + private SlcAgentFactory agentFactory; @Override protected void handleServiceRequest(HttpServletRequest request, HttpServletResponse response, ModelAndView modelAndView) throws Exception { + String agentId = request.getParameter("agentId"); String moduleName = request.getParameter("moduleName"); String version = request.getParameter("version"); - ExecutionModuleDescriptor md = modulesManager - .getExecutionModuleDescriptor(moduleName, version); + SlcAgent slcAgent = agentFactory.getAgent(agentId); + + ExecutionModuleDescriptor md = slcAgent.getExecutionModuleDescriptor( + moduleName, version); modelAndView.addObject(md); } - public void setModulesManager(ExecutionModulesManager modulesManager) { - this.modulesManager = modulesManager; + public void setAgentFactory(SlcAgentFactory agentFactory) { + this.agentFactory = agentFactory; } } diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/ListModulesDescriptors.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/ListModulesDescriptors.java index 32cf1383e..b9b210b56 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/ListModulesDescriptors.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/execution/ListModulesDescriptors.java @@ -1,42 +1,36 @@ package org.argeo.slc.web.mvc.execution; -import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.argeo.slc.execution.ExecutionModule; import org.argeo.slc.execution.ExecutionModuleDescriptor; -import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.msg.ObjectList; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentFactory; import org.argeo.slc.web.mvc.AbstractServiceController; import org.springframework.web.servlet.ModelAndView; /** . */ public class ListModulesDescriptors extends AbstractServiceController { - private ExecutionModulesManager modulesManager; + private SlcAgentFactory agentFactory; @Override protected void handleServiceRequest(HttpServletRequest request, HttpServletResponse response, ModelAndView modelAndView) throws Exception { - List modules = modulesManager.listExecutionModules(); + String agentId = request.getParameter("agentId"); + SlcAgent slcAgent = agentFactory.getAgent(agentId); - List descriptors = new ArrayList(); - for (ExecutionModule module : modules) { - ExecutionModuleDescriptor md = new ExecutionModuleDescriptor(); - md.setName(module.getName()); - md.setVersion(module.getVersion()); - descriptors.add(md); - } + List descriptors = slcAgent.listExecutionModuleDescriptors(); modelAndView.addObject(new ObjectList(descriptors)); } - public void setModulesManager(ExecutionModulesManager modulesManager) { - this.modulesManager = modulesManager; + public void setAgentFactory(SlcAgentFactory agentFactory) { + this.agentFactory = agentFactory; } } diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml index 7a8a88a8d..8262be92d 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml @@ -55,12 +55,12 @@ - + - + listExecutionModuleDescriptors(); + } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java index 39eadf69e..1e29a95ed 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java @@ -1,8 +1,24 @@ package org.argeo.slc.runtime; -public class SlcAgentDescriptor { +import java.util.ArrayList; +import java.util.List; + +import org.argeo.slc.execution.ExecutionModuleDescriptor; + +public class SlcAgentDescriptor implements Cloneable { private String uuid; private String host; + private List moduleDescriptors = new ArrayList(); + + public SlcAgentDescriptor() { + + } + + public SlcAgentDescriptor(SlcAgentDescriptor template) { + uuid = template.uuid; + host = template.host; + moduleDescriptors.addAll(template.moduleDescriptors); + } public String getUuid() { return uuid; @@ -20,4 +36,12 @@ public class SlcAgentDescriptor { this.host = host; } + public List getModuleDescriptors() { + return moduleDescriptors; + } + + public void setModuleDescriptors( + List modulesDescriptors) { + this.moduleDescriptors = modulesDescriptors; + } } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentFactory.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentFactory.java new file mode 100644 index 000000000..3ca566640 --- /dev/null +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentFactory.java @@ -0,0 +1,5 @@ +package org.argeo.slc.runtime; + +public interface SlcAgentFactory { + public SlcAgent getAgent(String uuid); +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java index 8678c1705..78e93481b 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java @@ -2,25 +2,36 @@ package org.argeo.slc.jms; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import javax.jms.ConnectionFactory; import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.jms.TextMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.runtime.AbstractAgent; +import org.argeo.slc.execution.ExecutionModule; +import org.argeo.slc.execution.ExecutionModuleDescriptor; +import org.argeo.slc.msg.ObjectList; import org.argeo.slc.runtime.SlcAgent; import org.argeo.slc.runtime.SlcAgentDescriptor; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.jms.support.converter.MessageConverter; /** JMS based implementation of SLC Agent. */ public class JmsAgent extends AbstractAgent implements SlcAgent, - InitializingBean, DisposableBean { + InitializingBean, DisposableBean, SessionAwareMessageListener { private final static Log log = LogFactory.getLog(JmsAgent.class); private final SlcAgentDescriptor agentDescriptor; @@ -29,6 +40,9 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, private Destination agentRegister; private Destination agentUnregister; + // private Destination requestDestination; + private Destination responseDestination; + private MessageConverter messageConverter; public JmsAgent() { @@ -81,12 +95,49 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, public String getMessageSelector() { String messageSelector = "slc_agentId='" + agentDescriptor.getUuid() + "'"; - // String messageSelector = "slc-agentId LIKE '%'"; - if (log.isDebugEnabled()) - log.debug("Message selector: " + messageSelector); + // if (log.isDebugEnabled()) + // log.debug("Message selector: " + messageSelector); return messageSelector; } + public void onMessage(Message message, Session session) throws JMSException { + MessageProducer producer = session.createProducer(responseDestination); + String query = message.getStringProperty("query"); + String correlationId = message.getJMSCorrelationID(); + if (log.isDebugEnabled()) + log.debug("Received query " + query + " with correlationId " + + correlationId); + + Message responseMsg = null; + if ("getExecutionModuleDescriptor".equals(query)) { + String moduleName = message.getStringProperty("moduleName"); + String version = message.getStringProperty("version"); + ExecutionModuleDescriptor emd = getExecutionModuleDescriptor( + moduleName, version); + responseMsg = messageConverter.toMessage(emd, session); + } else if ("listExecutionModuleDescriptors".equals(query)) { + + List lst = listExecutionModuleDescriptors(); + SlcAgentDescriptor agentDescriptorToSend = new SlcAgentDescriptor( + agentDescriptor); + agentDescriptorToSend.setModuleDescriptors(lst); + responseMsg = messageConverter.toMessage(agentDescriptorToSend, + session); + } else { + throw new SlcException("Unsupported query " + query); + } + + if (responseMsg != null) { + responseMsg.setJMSCorrelationID(correlationId); + producer.send(responseMsg); + if (log.isDebugEnabled()) + log.debug("Sent response to query " + query + + " with correlationId " + correlationId + ": " + + responseMsg); + } + + } + public void setMessageConverter(MessageConverter messageConverter) { this.messageConverter = messageConverter; } @@ -95,4 +146,28 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, this.connectionFactory = connectionFactory; } + public ExecutionModuleDescriptor getExecutionModuleDescriptor( + String moduleName, String version) { + return getModulesManager().getExecutionModuleDescriptor(moduleName, + version); + } + + public List listExecutionModuleDescriptors() { + List modules = getModulesManager() + .listExecutionModules(); + + List descriptors = new ArrayList(); + for (ExecutionModule module : modules) { + ExecutionModuleDescriptor md = new ExecutionModuleDescriptor(); + md.setName(module.getName()); + md.setVersion(module.getVersion()); + descriptors.add(md); + } + return descriptors; + } + + public void setResponseDestination(Destination responseDestination) { + this.responseDestination = responseDestination; + } + } diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java new file mode 100644 index 000000000..3a311b934 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java @@ -0,0 +1,128 @@ +package org.argeo.slc.jms; + +import java.util.List; +import java.util.UUID; + +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.Session; +import javax.jms.TextMessage; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.SlcException; +import org.argeo.slc.execution.ExecutionModule; +import org.argeo.slc.execution.ExecutionModuleDescriptor; +import org.argeo.slc.msg.ObjectList; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.springframework.jms.JmsException; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.core.MessageCreator; +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +public class JmsAgentProxy implements SlcAgent { + private final static Log log = LogFactory.getLog(JmsAgentProxy.class); + + private final String agentUuid; + private final Destination requestDestination; + private final Destination responseDestination; + private final JmsTemplate jmsTemplate; + private final MessageConverter messageConverter; + + public JmsAgentProxy(String agentUuid, Destination requestDestination, + Destination responseDestination, JmsTemplate jmsTemplate, + MessageConverter messageConverter) { + this.agentUuid = agentUuid; + this.requestDestination = requestDestination; + this.responseDestination = responseDestination; + this.jmsTemplate = jmsTemplate; + this.messageConverter = messageConverter; + } + + public ExecutionModuleDescriptor getExecutionModuleDescriptor( + final String moduleName, final String version) { + return (ExecutionModuleDescriptor) sendReceive(new AgentProxyMessageCreator( + "getExecutionModuleDescriptor") { + public void setArguments(Message message) throws JMSException { + message.setStringProperty("moduleName", moduleName); + message.setStringProperty("version", version); + } + }); + } + + public List listExecutionModuleDescriptors() { + return ((SlcAgentDescriptor) sendReceive(new AgentProxyMessageCreator( + "listExecutionModuleDescriptors"))).getModuleDescriptors(); + } + + protected Object sendReceive(AgentProxyMessageCreator messageCreator) { + String correlationId = UUID.randomUUID().toString(); + messageCreator.setCorrelationId(correlationId); + send(messageCreator); + return processResponse(correlationId); + } + + protected void send(AgentProxyMessageCreator messageCreator) { + jmsTemplate.send(requestDestination, messageCreator); + if (log.isDebugEnabled()) + log.debug("Sent request" + messageCreator.getQuery() + " to agent " + + agentUuid + " with correlationId " + + messageCreator.getCorrelationId()); + } + + protected Object processResponse(String correlationId) { + try { + Message responseMsg = jmsTemplate.receiveSelected( + responseDestination, "JMSCorrelationID='" + correlationId + + "'"); + if (log.isDebugEnabled()) + log.debug("Received response with correlationId " + + correlationId); + return messageConverter.fromMessage(responseMsg); + } catch (Exception e) { + throw new SlcException("Could not process response from agent " + + agentUuid + " with correlationId " + correlationId, e); + } + } + + protected class AgentProxyMessageCreator implements MessageCreator { + private final String query; + private String correlationId; + + public AgentProxyMessageCreator(String query) { + this.query = query; + } + + public final Message createMessage(Session session) throws JMSException { + if (agentUuid == null) + throw new SlcException("Agent UUID not set"); + if (correlationId == null) + throw new SlcException("JMSCorrelationID not set"); + TextMessage msg = session.createTextMessage(); + msg.setStringProperty("slc_agentId", agentUuid); + msg.setStringProperty("query", query); + msg.setJMSCorrelationID(correlationId); + setArguments(msg); + return msg; + } + + protected void setArguments(Message message) throws JMSException { + } + + public String getQuery() { + return query; + } + + public String getCorrelationId() { + return correlationId; + } + + public void setCorrelationId(String correlationId) { + this.correlationId = correlationId; + } + + } +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxyFactory.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxyFactory.java new file mode 100644 index 000000000..1f625e13f --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxyFactory.java @@ -0,0 +1,37 @@ +package org.argeo.slc.jms; + +import javax.jms.Destination; + +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentFactory; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.support.converter.MessageConverter; + +public class JmsAgentProxyFactory implements SlcAgentFactory { + private Destination requestDestination; + private Destination responseDestination; + private JmsTemplate jmsTemplate; + private MessageConverter messageConverter; + + public SlcAgent getAgent(String uuid) { + return new JmsAgentProxy(uuid, requestDestination, responseDestination, + jmsTemplate, messageConverter); + } + + public void setRequestDestination(Destination requestDestination) { + this.requestDestination = requestDestination; + } + + public void setResponseDestination(Destination responseDestination) { + this.responseDestination = responseDestination; + } + + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; + } + + public void setMessageConverter(MessageConverter messageConverter) { + this.messageConverter = messageConverter; + } + +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java index 88d40a426..b42602606 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java @@ -44,7 +44,8 @@ public class MarshallerMessageConverter implements MessageConverter { throw new SlcException("Could not unmarshall " + text, e); } } else { - throw new SlcException("Only JMS TextMessage are supported."); + throw new SlcException("This type of messages is not supported: " + + message); } } diff --git a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml index c72f98c85..80f844d03 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml +++ b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml @@ -13,6 +13,10 @@ parent="slcJms.amTopic" /> + + - + diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml index 839603dc3..ce591d9af 100644 --- a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml @@ -12,5 +12,9 @@ + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/ExecutionModuleDescriptorCastorTest.java b/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/ExecutionModuleDescriptorCastorTest.java index 5adbd62c3..0ee306256 100644 --- a/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/ExecutionModuleDescriptorCastorTest.java +++ b/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/ExecutionModuleDescriptorCastorTest.java @@ -6,6 +6,7 @@ import java.util.List; import org.argeo.slc.execution.ExecutionFlowDescriptor; import org.argeo.slc.execution.ExecutionModuleDescriptor; import org.argeo.slc.execution.ExecutionSpec; +import org.argeo.slc.msg.ObjectList; import org.argeo.slc.unit.execution.ExecutionFlowDescriptorTestUtils; public class ExecutionModuleDescriptorCastorTest extends AbstractCastorTestCase { @@ -27,4 +28,12 @@ public class ExecutionModuleDescriptorCastorTest extends AbstractCastorTestCase marshUnmarsh(moduleDescriptor, false); } + + public void testMarshUnmarshMini() throws Exception { + ExecutionModuleDescriptor moduleDescriptor = new ExecutionModuleDescriptor(); + moduleDescriptor.setName("test.moodule"); + moduleDescriptor.setVersion("1.0.0"); + marshUnmarsh(moduleDescriptor, false); + } + } diff --git a/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/SlcAgentDescriptorCastorTest.java b/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/SlcAgentDescriptorCastorTest.java new file mode 100644 index 000000000..2e5e3afe2 --- /dev/null +++ b/runtime/org.argeo.slc.support.castor/src/test/java/org/argeo/slc/castor/SlcAgentDescriptorCastorTest.java @@ -0,0 +1,38 @@ +package org.argeo.slc.castor; + +import java.util.ArrayList; +import java.util.List; + +import org.argeo.slc.execution.ExecutionFlowDescriptor; +import org.argeo.slc.execution.ExecutionModuleDescriptor; +import org.argeo.slc.execution.ExecutionSpec; +import org.argeo.slc.msg.ObjectList; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.argeo.slc.unit.execution.ExecutionFlowDescriptorTestUtils; + +public class SlcAgentDescriptorCastorTest extends AbstractCastorTestCase { + public void testMarshUnmarshMini() throws Exception { + SlcAgentDescriptor agentDescriptor = createMiniAgentDescriptor(); + marshUnmarsh(agentDescriptor, false); + } + + public void testMarshUnmarshWithModuleDescriptor() throws Exception { + SlcAgentDescriptor agentDescriptor = createMiniAgentDescriptor(); + + List lst = new ArrayList(); + ExecutionModuleDescriptor moduleDescriptor = new ExecutionModuleDescriptor(); + moduleDescriptor.setName("test.moodule"); + moduleDescriptor.setVersion("1.0.0"); + lst.add(moduleDescriptor); + agentDescriptor.setModuleDescriptors(lst); + + marshUnmarsh(agentDescriptor, false); + } + + protected static SlcAgentDescriptor createMiniAgentDescriptor(){ + SlcAgentDescriptor agentDescriptor = new SlcAgentDescriptor(); + agentDescriptor.setHost("localhost"); + agentDescriptor.setUuid("555"); + return agentDescriptor; + } +} diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java index d3647b718..75215115e 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java @@ -1,49 +1,24 @@ package org.argeo.slc.core.runtime; -import java.util.Map; -import java.util.Properties; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.process.SlcExecution; -import org.argeo.slc.runtime.SlcApplication; -import org.argeo.slc.runtime.SlcExecutionContext; public abstract class AbstractAgent { - private final static Log log = LogFactory.getLog(AbstractAgent.class); +// private final static Log log = LogFactory.getLog(AbstractAgent.class); -// private SlcApplication slcApplication; - private ExecutionModulesManager modulesManager; protected void runSlcExecution(final SlcExecution slcExecution) { modulesManager.process(slcExecution); -// Thread thread = new Thread("SlcExecution " + slcExecution.getUuid()) { -// public void run() { -// Properties props = new Properties(); -// Map attributes = slcExecution.getAttributes(); -// for (String key : attributes.keySet()) { -// props.setProperty(key, attributes.get(key)); -// if (log.isTraceEnabled()) -// log.trace(key + "=" + props.getProperty(key)); -// } -// slcApplication.execute(slcExecution, props, null, null); -// log.debug("Thread for SLC execution #" + slcExecution.getUuid() -// + " finished."); -// } -// }; -// thread.start(); } public void setModulesManager(ExecutionModulesManager modulesManager) { this.modulesManager = modulesManager; } - -// public void setSlcApplication( -// SlcApplication application) { -// this.slcApplication = application; -// } + public ExecutionModulesManager getModulesManager() { + return modulesManager; + } + } diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js index 6e232ff3a..38eeb25fe 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js @@ -290,11 +290,12 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", * @param folder {qx.ui.tree.TreeFolder} A Tree folder containing in the key "moduleData" of its user data a map containing the keys {name,version} */ flowLoader : function(folder){ - var moduleData = folder.getUserData("moduleData"); + var moduleData = folder.getUserData("moduleData"); + var agentUuid = folder.getUserData("agentUuid"); //var pathStub = ["", "/test/toto/zobi", "loop"]; //var indexStub = 0; - var req = org.argeo.slc.ria.SlcApi.getLoadExecutionDescriptorService(moduleData.name, moduleData.version); + var req = org.argeo.slc.ria.SlcApi.getLoadExecutionDescriptorService(agentUuid,moduleData.name, moduleData.version); req.addListener("completed", function(response){ var executionModule = new org.argeo.slc.ria.execution.Module(); executionModule.setXmlNode(response.getContent()); @@ -306,7 +307,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", //indexStub ++; file.setUserData("executionModule", executionModule); file.setUserData("executionFlow", execFlows[key]); - file.setUserData("agentUuid", folder.getUserData("agentUuid")); + file.setUserData("agentUuid", agentUuid); org.argeo.slc.ria.NewLauncherApplet.attachNodeByPath( folder, path, diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcApi.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcApi.js index e2bdefb1a..e598db51e 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcApi.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcApi.js @@ -235,12 +235,13 @@ qx.Class.define("org.argeo.slc.ria.SlcApi", * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update * @return {qx.io.remote.Request} */ - getLoadExecutionDescriptorService : function(moduleName, moduleVersion, fireReloadEventType, iLoadStatusables){ + getLoadExecutionDescriptorService : function(agentId,moduleName, moduleVersion, fireReloadEventType, iLoadStatusables){ var req = org.argeo.slc.ria.SlcApi.getServiceRequest( org.argeo.slc.ria.SlcApi.GET_EXECUTION_DESC_SERVICE, fireReloadEventType, iLoadStatusables ); + req.setParameter("agentId", agentId); req.setParameter("moduleName", moduleName); req.setParameter("version", moduleVersion); return req; diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/MANIFEST.MF index 888a64c39..fbee184ee 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/MANIFEST.MF +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/MANIFEST.MF @@ -4,6 +4,7 @@ Import-Package: javax.jms, javax.management.j2ee.statistics, org.apache.commons.logging Require-Bundle: + org.argeo.slc.specs, org.argeo.slc.server, org.argeo.slc.support.activemq, org.springframework.core, diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms-osgi.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms-osgi.xml index 8e68b5535..1abc49736 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms-osgi.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms-osgi.xml @@ -14,4 +14,5 @@ + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml index 5e1687d78..a44c6e43d 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml @@ -6,6 +6,18 @@ + + + + + + + + + + + + diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml index bc1d3fcf2..e60afa165 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml @@ -29,4 +29,6 @@ + + \ No newline at end of file -- 2.39.2