SlcExecution related events
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 5 May 2009 06:47:54 +0000 (06:47 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 5 May 2009 06:47:54 +0000 (06:47 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2397 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgConstants.java [new file with mode: 0644]
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml

index ea0ce12c3614d02b5987ff70d89a5fdf54995b0d..72cde61e13aa454cd3e136b7cc4af5de4a3e5793 100644 (file)
@@ -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<SlcEventPublisher> 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 (file)
index 0000000..c551005
--- /dev/null
@@ -0,0 +1,44 @@
+package org.argeo.slc.web.mvc.process;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.xml.transform.stream.StreamSource;\r
+\r
+import org.argeo.slc.msg.MsgConstants;\r
+import org.argeo.slc.process.SlcExecution;\r
+import org.argeo.slc.runtime.SlcAgent;\r
+import org.argeo.slc.runtime.SlcAgentFactory;\r
+import org.argeo.slc.web.mvc.AbstractServiceController;\r
+import org.springframework.oxm.Unmarshaller;\r
+import org.springframework.web.servlet.ModelAndView;\r
+\r
+/** Send a new SlcExecution. */\r
+public class NewSlcExecutionController extends AbstractServiceController {\r
+       private SlcAgentFactory agentFactory;\r
+       private Unmarshaller unmarshaller;\r
+\r
+       @Override\r
+       protected void handleServiceRequest(HttpServletRequest request,\r
+                       HttpServletResponse response, ModelAndView modelAndView)\r
+                       throws Exception {\r
+\r
+               String agentId = request\r
+                               .getParameter(MsgConstants.PROPERTY_SLC_AGENT_ID);\r
+\r
+               StreamSource source = new StreamSource(request.getInputStream());\r
+               SlcExecution slcExecution = (SlcExecution) unmarshaller\r
+                               .unmarshal(source);\r
+\r
+               SlcAgent agent = agentFactory.getAgent(agentId);\r
+               agent.runSlcExecution(slcExecution);\r
+       }\r
+\r
+       public void setUnmarshaller(Unmarshaller unmarshaller) {\r
+               this.unmarshaller = unmarshaller;\r
+       }\r
+\r
+       public void setAgentFactory(SlcAgentFactory agentFactory) {\r
+               this.agentFactory = agentFactory;\r
+       }\r
+\r
+}\r
index 85bdb1451dab344d6f10e9053126758bad29f667..d264042f96f573457c72ca2d145d2d906b9cb6d4 100644 (file)
@@ -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;
index 7fa270a9b90096238399da38a87c62c124275d54..a3a8c5487e10ece045665ccd0a38622ee41bc8e5 100644 (file)
@@ -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);
index 68295e8cf14dd0d3bbcfaf10acc8301d168b0ff4..aa66dc8da097626178856c0d36207e978e2b8430 100644 (file)
@@ -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);
index 16f87e9a3755ae8e86b15cf38f824ceeda7141c0..455bd9ccba5410039060fd29ed9e3d5448469cc4 100644 (file)
@@ -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 (file)
index 0000000..3dffb76
--- /dev/null
@@ -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() {
+
+       }
+}
index 5f17ee8d234e5a4fb6a85d608a05739a71f22416..eb90e301511cea61394f4c5a48027567a2ae2e51 100644 (file)
                <constructor-arg ref="slcExecutionDao" />
        </bean>
 
+       <bean name="/newSlcExecution.service"
+               class="org.argeo.slc.web.mvc.process.NewSlcExecutionController">
+               <property name="agentFactory" ref="agentFactory" />
+               <property name="unmarshaller" ref="slcDefault.castor.marshaller" />
+       </bean>
+
        <bean name="/getExecutionDescriptor.service" class="org.argeo.slc.web.mvc.execution.GetModuleDescriptor">
                <property name="agentFactory" ref="agentFactory" />
        </bean>