]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java
Event listener use only one JMS Connection
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.activemq / src / main / java / org / argeo / slc / jms / JmsTransferNewExecution.java
index 856b956a45fbdf80b88c764ab709862e534b8969..aa66dc8da097626178856c0d36207e978e2b8430 100644 (file)
@@ -1,34 +1,51 @@
 package org.argeo.slc.jms;
 
-import java.util.UUID;
-
-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.springframework.jms.listener.SessionAwareMessageListener;
-
-/** Temporary hack*/
-public class JmsTransferNewExecution implements SessionAwareMessageListener {
-       private Destination requestDestination;
-
-       public void onMessage(Message message, Session session) throws JMSException {
-               TextMessage messageToSend = session
-                               .createTextMessage(((TextMessage) message).getText());
-               messageToSend
-                               .setStringProperty(JmsAgent.PROPERTY_QUERY, "newExecution");
-               messageToSend.setStringProperty(JmsAgent.PROPERTY_SLC_AGENT_ID, message
-                               .getStringProperty(JmsAgent.PROPERTY_SLC_AGENT_ID));
-               messageToSend.setJMSCorrelationID(UUID.randomUUID().toString());
-               MessageProducer producer = session.createProducer(requestDestination);
-               producer.send(messageToSend);
+import javax.jms.MessageListener;
+
+import org.argeo.slc.SlcException;
+import org.argeo.slc.msg.MsgConstants;
+import org.argeo.slc.msg.MsgHandler;
+import org.argeo.slc.process.SlcExecution;
+import org.argeo.slc.runtime.SlcAgent;
+import org.argeo.slc.runtime.SlcAgentFactory;
+import org.springframework.jms.support.converter.MessageConverter;
+
+/** Temporary hack */
+public class JmsTransferNewExecution implements MessageListener {
+       private MessageConverter messageConverter;
+       private SlcAgentFactory agentFactory;
+       private MsgHandler serviceMsgHandler;
+
+       public void onMessage(final Message message) {
+               try {
+                       String agentId = message
+                                       .getStringProperty(MsgConstants.PROPERTY_SLC_AGENT_ID);
+                       final SlcAgent agent = agentFactory.getAgent(agentId);
+                       final SlcExecution slcExecution = (SlcExecution) messageConverter
+                                       .fromMessage(message);
+                       new Thread() {
+                               public void run() {
+                                       agent.runSlcExecution(slcExecution);
+                               }
+                       }.start();
+                       serviceMsgHandler.handleMsg(slcExecution);
+               } catch (Exception e) {
+                       throw new SlcException("Could not transfer new execution "
+                                       + message, e);
+               }
+       }
+
+       public void setMessageConverter(MessageConverter messageConverter) {
+               this.messageConverter = messageConverter;
+       }
+
+       public void setAgentFactory(SlcAgentFactory agentFactory) {
+               this.agentFactory = agentFactory;
        }
 
-       public void setRequestDestination(Destination requestDestination) {
-               this.requestDestination = requestDestination;
+       public void setServiceMsgHandler(MsgHandler serviceMsgHandler) {
+               this.serviceMsgHandler = serviceMsgHandler;
        }
 
 }