]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java
Make JMS Agents more robust
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.activemq / src / main / java / org / argeo / slc / jms / JmsAgentProxy.java
index 8837a8155993cdc4c9a04954f45e228c848e3961..4029af0a9a95619bff92fdfa788fa85c74803952 100644 (file)
@@ -19,7 +19,6 @@ import org.argeo.slc.runtime.SlcAgent;
 import org.argeo.slc.runtime.SlcAgentDescriptor;
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.core.MessageCreator;
-import org.springframework.jms.support.converter.MessageConverter;
 
 public class JmsAgentProxy implements SlcAgent {
        private final static Log log = LogFactory.getLog(JmsAgentProxy.class);
@@ -28,16 +27,13 @@ public class JmsAgentProxy implements SlcAgent {
        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) {
+                       Destination responseDestination, JmsTemplate jmsTemplate) {
                this.agentUuid = agentUuid;
                this.requestDestination = requestDestination;
                this.responseDestination = responseDestination;
                this.jmsTemplate = jmsTemplate;
-               this.messageConverter = messageConverter;
        }
 
        public ExecutionModuleDescriptor getExecutionModuleDescriptor(
@@ -103,7 +99,7 @@ public class JmsAgentProxy implements SlcAgent {
 
        protected void send(AgentMC messageCreator) {
                jmsTemplate.send(requestDestination, messageCreator);
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Sent query '" + messageCreator.getQuery()
                                        + "' with correlationId "
                                        + messageCreator.getCorrelationId() + " to agent "
@@ -132,13 +128,13 @@ public class JmsAgentProxy implements SlcAgent {
                        else
                                return null;
                }
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Received response for query '" + query
                                        + "' with correlationId " + correlationId + " from agent "
                                        + agentUuid);
 
                try {
-                       return messageConverter.fromMessage(responseMsg);
+                       return fromMessage(responseMsg);
                } catch (Exception e) {
                        throw new SlcException("Could not convert response from agent "
                                        + agentUuid + " with correlationId " + correlationId
@@ -146,6 +142,15 @@ public class JmsAgentProxy implements SlcAgent {
                }
        }
 
+       protected Object fromMessage(Message message) throws JMSException {
+               return jmsTemplate.getMessageConverter().fromMessage(message);
+       }
+
+       protected Message toMessage(Object obj, Session session)
+                       throws JMSException {
+               return jmsTemplate.getMessageConverter().toMessage(obj, session);
+       }
+
        protected class AgentMC implements MessageCreator {
                private final String query;
                private Object body = null;
@@ -169,11 +174,20 @@ public class JmsAgentProxy implements SlcAgent {
                        if (body == null)
                                msg = session.createTextMessage();
                        else
-                               msg = messageConverter.toMessage(body, session);
+                               msg = toMessage(body, session);
                        msg.setStringProperty(JmsAgent.PROPERTY_SLC_AGENT_ID, agentUuid);
                        msg.setStringProperty(JmsAgent.PROPERTY_QUERY, query);
                        msg.setJMSCorrelationID(correlationId);
                        setArguments(msg);
+                       if (msg instanceof TextMessage) {
+                               TextMessage textMessage = (TextMessage) msg;
+                               if (textMessage.getText() == null) {
+                                       // TODO: remove workaround when upgrading to ActiveMQ 5.3
+                                       // Workaround for
+                                       // https://issues.apache.org/activemq/browse/AMQ-2046
+                                       textMessage.setText("");
+                               }
+                       }
                        return msg;
                }