]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java
Improve detached launcher
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.activemq / src / main / java / org / argeo / slc / jms / JmsAgent.java
index 78e93481b751d73c18a19e5c1c5b1431d931b1eb..baddb1c604f075f4af5a5cc7667531331f48631a 100644 (file)
@@ -6,7 +6,6 @@ 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;
@@ -20,22 +19,25 @@ 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.process.SlcExecution;
 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;
+import org.springframework.jms.support.converter.MessageConversionException;
 
 /** JMS based implementation of SLC Agent. */
 public class JmsAgent extends AbstractAgent implements SlcAgent,
                InitializingBean, DisposableBean, SessionAwareMessageListener {
+       public final static String PROPERTY_QUERY = "query";
+       public final static String PROPERTY_SLC_AGENT_ID = "slc_agentId";
+
        private final static Log log = LogFactory.getLog(JmsAgent.class);
 
        private final SlcAgentDescriptor agentDescriptor;
-       private ConnectionFactory connectionFactory;
+       // private ConnectionFactory connectionFactory;
        private JmsTemplate jmsTemplate;
        private Destination agentRegister;
        private Destination agentUnregister;
@@ -43,7 +45,7 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
        // private Destination requestDestination;
        private Destination responseDestination;
 
-       private MessageConverter messageConverter;
+       // private MessageConverter messageConverter;
 
        public JmsAgent() {
                try {
@@ -57,8 +59,8 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
 
        public void afterPropertiesSet() throws Exception {
                // Initialize JMS Template
-               jmsTemplate = new JmsTemplate(connectionFactory);
-               jmsTemplate.setMessageConverter(messageConverter);
+               // jmsTemplate = new JmsTemplate(connectionFactory);
+               // jmsTemplate.setMessageConverter(messageConverter);
 
                jmsTemplate.convertAndSend(agentRegister, agentDescriptor);
                log.info("Agent #" + agentDescriptor.getUuid() + " registered to "
@@ -79,19 +81,6 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                this.agentUnregister = agentUnregister;
        }
 
-       /*
-        * public void onMessage(Message message) { // FIXME: we filter the messages
-        * on the client side, // because of a weird problem with selector since
-        * moving to OSGi try { if (message.getStringProperty("slc-agentId").equals(
-        * agentDescriptor.getUuid())) { runSlcExecution((SlcExecution)
-        * messageConverter .fromMessage(message)); } else { if
-        * (log.isDebugEnabled()) log.debug("Filtered out message " + message); } }
-        * catch (JMSException e) { throw new SlcException("Cannot convert message "
-        * + message, e); }
-        * 
-        * }
-        */
-
        public String getMessageSelector() {
                String messageSelector = "slc_agentId='" + agentDescriptor.getUuid()
                                + "'";
@@ -102,7 +91,7 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
 
        public void onMessage(Message message, Session session) throws JMSException {
                MessageProducer producer = session.createProducer(responseDestination);
-               String query = message.getStringProperty("query");
+               String query = message.getStringProperty(PROPERTY_QUERY);
                String correlationId = message.getJMSCorrelationID();
                if (log.isDebugEnabled())
                        log.debug("Received query " + query + " with correlationId "
@@ -114,17 +103,35 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                        String version = message.getStringProperty("version");
                        ExecutionModuleDescriptor emd = getExecutionModuleDescriptor(
                                        moduleName, version);
-                       responseMsg = messageConverter.toMessage(emd, session);
+                       responseMsg = jmsTemplate.getMessageConverter().toMessage(emd,
+                                       session);
                } else if ("listExecutionModuleDescriptors".equals(query)) {
 
                        List<ExecutionModuleDescriptor> lst = listExecutionModuleDescriptors();
                        SlcAgentDescriptor agentDescriptorToSend = new SlcAgentDescriptor(
                                        agentDescriptor);
                        agentDescriptorToSend.setModuleDescriptors(lst);
-                       responseMsg = messageConverter.toMessage(agentDescriptorToSend,
-                                       session);
+                       responseMsg = jmsTemplate.getMessageConverter().toMessage(
+                                       agentDescriptorToSend, session);
+               } else if ("newExecution".equals(query)) {
+
+                       SlcExecution slcExecution = (SlcExecution) jmsTemplate
+                                       .getMessageConverter().fromMessage(message);
+                       runSlcExecution(slcExecution);
+                       return;
                } else {
-                       throw new SlcException("Unsupported query " + query);
+                       // try {
+                       // // FIXME: generalize
+                       // SlcExecution slcExecution = (SlcExecution) jmsTemplate
+                       // .getMessageConverter().fromMessage(message);
+                       // runSlcExecution(slcExecution);
+                       // } catch (MessageConversionException e) {
+                       // if (log.isDebugEnabled())
+                       // log.debug("Unsupported query " + query, e);
+                       // }
+                       if (log.isDebugEnabled())
+                               log.debug("Unsupported query " + query);
+                       return;
                }
 
                if (responseMsg != null) {
@@ -138,14 +145,6 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
 
        }
 
-       public void setMessageConverter(MessageConverter messageConverter) {
-               this.messageConverter = messageConverter;
-       }
-
-       public void setConnectionFactory(ConnectionFactory connectionFactory) {
-               this.connectionFactory = connectionFactory;
-       }
-
        public ExecutionModuleDescriptor getExecutionModuleDescriptor(
                        String moduleName, String version) {
                return getModulesManager().getExecutionModuleDescriptor(moduleName,
@@ -170,4 +169,8 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                this.responseDestination = responseDestination;
        }
 
+       public void setJmsTemplate(JmsTemplate jmsTemplate) {
+               this.jmsTemplate = jmsTemplate;
+       }
+
 }