From 8554a8b6d52be4cefc87de1447d9f804011dee80 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 5 May 2009 06:47:54 +0000 Subject: [PATCH] SlcExecution related events git-svn-id: https://svn.argeo.org/slc/trunk@2397 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../slc/services/EventPublisherAspect.java | 38 +++++++++++++--- .../process/NewSlcExecutionController.java | 44 +++++++++++++++++++ .../main/java/org/argeo/slc/jms/JmsAgent.java | 3 +- .../java/org/argeo/slc/jms/JmsAgentProxy.java | 4 +- .../slc/jms/JmsTransferNewExecution.java | 4 +- .../argeo/slc/core/runtime/AbstractAgent.java | 2 - .../java/org/argeo/slc/msg/MsgConstants.java | 13 ++++++ .../WEB-INF/slc-service-servlet.xml | 6 +++ 8 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java create mode 100644 runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgConstants.java diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java index ea0ce12c3..72cde61e1 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java @@ -5,9 +5,11 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.slc.core.runtime.AbstractAgent; +import org.argeo.slc.msg.MsgConstants; import org.argeo.slc.msg.event.SlcEvent; import org.argeo.slc.msg.event.SlcEventPublisher; +import org.argeo.slc.msg.process.SlcExecutionStatusRequest; +import org.argeo.slc.process.SlcExecution; import org.argeo.slc.runtime.SlcAgentDescriptor; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; @@ -15,6 +17,11 @@ import org.aspectj.lang.annotation.Aspect; @Aspect public class EventPublisherAspect { + public final static String EVT_AGENT_REGISTERED = "agentRegistered"; + public final static String EVT_AGENT_UNREGISTERED = "agentUnregistered"; + public final static String EVT_NEW_SLC_EXECUTION = "newSlcExecution"; + public final static String EVT_UPDATE_SLC_EXECUTION_STATUS = "updateSlcExecutionStatus"; + private final static Log log = LogFactory .getLog(EventPublisherAspect.class); @@ -23,8 +30,8 @@ public class EventPublisherAspect { @After("execution(void org.argeo.slc.services.runtime.AgentService.register(..))") public void registerAgent(JoinPoint jp) throws Throwable { SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0]; - SlcEvent event = new SlcEvent("agentRegistered"); - event.getHeaders().put(AbstractAgent.PROPERTY_SLC_AGENT_ID, + SlcEvent event = new SlcEvent(EVT_AGENT_REGISTERED); + event.getHeaders().put(MsgConstants.PROPERTY_SLC_AGENT_ID, agentDescriptor.getUuid()); publishEvent(event); } @@ -32,12 +39,33 @@ public class EventPublisherAspect { @After("execution(void org.argeo.slc.services.runtime.AgentService.unregister(..))") public void unregisterAgent(JoinPoint jp) throws Throwable { SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0]; - SlcEvent event = new SlcEvent("agentUnregistered"); - event.getHeaders().put(AbstractAgent.PROPERTY_SLC_AGENT_ID, + SlcEvent event = new SlcEvent(EVT_AGENT_UNREGISTERED); + event.getHeaders().put(MsgConstants.PROPERTY_SLC_AGENT_ID, agentDescriptor.getUuid()); publishEvent(event); } + @After("execution(void org.argeo.slc.services.process.SlcExecutionService.newExecution(..))") + public void newSlcExecution(JoinPoint jp) throws Throwable { + SlcExecution slcExecution = (SlcExecution) jp.getArgs()[0]; + SlcEvent event = new SlcEvent(EVT_NEW_SLC_EXECUTION); + event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_ID, + slcExecution.getUuid()); + publishEvent(event); + } + + @After("execution(void org.argeo.slc.services.process.SlcExecutionService.updateStatus(..))") + public void updateSlcExecutionStatus(JoinPoint jp) throws Throwable { + SlcExecutionStatusRequest msg = (SlcExecutionStatusRequest) jp + .getArgs()[0]; + SlcEvent event = new SlcEvent(EVT_UPDATE_SLC_EXECUTION_STATUS); + event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_ID, + msg.getSlcExecutionUuid()); + event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_STATUS, + msg.getNewStatus()); + publishEvent(event); + } + public void setEventPublishers(List eventPublishers) { this.eventPublishers = eventPublishers; } diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java new file mode 100644 index 000000000..c551005bc --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java @@ -0,0 +1,44 @@ +package org.argeo.slc.web.mvc.process; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.transform.stream.StreamSource; + +import org.argeo.slc.msg.MsgConstants; +import org.argeo.slc.process.SlcExecution; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentFactory; +import org.argeo.slc.web.mvc.AbstractServiceController; +import org.springframework.oxm.Unmarshaller; +import org.springframework.web.servlet.ModelAndView; + +/** Send a new SlcExecution. */ +public class NewSlcExecutionController extends AbstractServiceController { + private SlcAgentFactory agentFactory; + private Unmarshaller unmarshaller; + + @Override + protected void handleServiceRequest(HttpServletRequest request, + HttpServletResponse response, ModelAndView modelAndView) + throws Exception { + + String agentId = request + .getParameter(MsgConstants.PROPERTY_SLC_AGENT_ID); + + StreamSource source = new StreamSource(request.getInputStream()); + SlcExecution slcExecution = (SlcExecution) unmarshaller + .unmarshal(source); + + SlcAgent agent = agentFactory.getAgent(agentId); + agent.runSlcExecution(slcExecution); + } + + public void setUnmarshaller(Unmarshaller unmarshaller) { + this.unmarshaller = unmarshaller; + } + + public void setAgentFactory(SlcAgentFactory agentFactory) { + this.agentFactory = agentFactory; + } + +} 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 85bdb1451..d264042f9 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 @@ -18,6 +18,7 @@ import org.argeo.slc.core.runtime.AbstractAgent; import org.argeo.slc.execution.ExecutionModule; import org.argeo.slc.execution.ExecutionModuleDescriptor; import org.argeo.slc.msg.ExecutionAnswer; +import org.argeo.slc.msg.MsgConstants; import org.argeo.slc.msg.ReferenceList; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.runtime.SlcAgent; @@ -157,7 +158,7 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, public Message postProcessMessage(Message messageToSend) throws JMSException { messageToSend.setStringProperty(PROPERTY_QUERY, query); - messageToSend.setStringProperty(AbstractAgent.PROPERTY_SLC_AGENT_ID, + messageToSend.setStringProperty(MsgConstants.PROPERTY_SLC_AGENT_ID, agentDescriptor.getUuid()); messageToSend.setJMSCorrelationID(correlationId); return messageToSend; 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 index 7fa270a9b..a3a8c5487 100644 --- 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 @@ -12,9 +12,9 @@ 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.ExecutionModuleDescriptor; import org.argeo.slc.msg.ExecutionAnswer; +import org.argeo.slc.msg.MsgConstants; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.runtime.SlcAgent; import org.argeo.slc.runtime.SlcAgentDescriptor; @@ -176,7 +176,7 @@ public class JmsAgentProxy implements SlcAgent { msg = session.createTextMessage(); else msg = toMessage(body, session); - msg.setStringProperty(AbstractAgent.PROPERTY_SLC_AGENT_ID, agentUuid); + msg.setStringProperty(MsgConstants.PROPERTY_SLC_AGENT_ID, agentUuid); msg.setStringProperty(JmsAgent.PROPERTY_QUERY, query); msg.setJMSCorrelationID(correlationId); setArguments(msg); diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java index 68295e8cf..aa66dc8da 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java @@ -4,7 +4,7 @@ import javax.jms.Message; import javax.jms.MessageListener; import org.argeo.slc.SlcException; -import org.argeo.slc.core.runtime.AbstractAgent; +import org.argeo.slc.msg.MsgConstants; import org.argeo.slc.msg.MsgHandler; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.runtime.SlcAgent; @@ -20,7 +20,7 @@ public class JmsTransferNewExecution implements MessageListener { public void onMessage(final Message message) { try { String agentId = message - .getStringProperty(AbstractAgent.PROPERTY_SLC_AGENT_ID); + .getStringProperty(MsgConstants.PROPERTY_SLC_AGENT_ID); final SlcAgent agent = agentFactory.getAgent(agentId); final SlcExecution slcExecution = (SlcExecution) messageConverter .fromMessage(message); 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 16f87e9a3..455bd9ccb 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 @@ -7,8 +7,6 @@ public abstract class AbstractAgent { // private final static Log log = LogFactory.getLog(AbstractAgent.class); private ExecutionModulesManager modulesManager; - public final static String PROPERTY_SLC_AGENT_ID = "slc_agentId"; - public void runSlcExecution(final SlcExecution slcExecution) { modulesManager.process(slcExecution); } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgConstants.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgConstants.java new file mode 100644 index 000000000..3dffb76b8 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgConstants.java @@ -0,0 +1,13 @@ +package org.argeo.slc.msg; + +public class MsgConstants { + + public final static String PROPERTY_SLC_AGENT_ID = "slc_agentId"; + public final static String PROPERTY_SLC_EXECUTION_ID = "slc_executionId"; + public final static String PROPERTY_SLC_EXECUTION_STATUS = "slc_executionStatus"; + + /** Force singleton */ + private MsgConstants() { + + } +} diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml index 5f17ee8d2..eb90e3015 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml @@ -55,6 +55,12 @@ + + + + + -- 2.39.2