Make JMS Agents more robust
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 4 May 2009 12:04:27 +0000 (12:04 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 4 May 2009 12:04:27 +0000 (12:04 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2395 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

demo/site/org.argeo.slc.demo.basic/META-INF/MANIFEST.MF
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java
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

index f0e17c1e457d3855ca06af05e07177f31be26399..a3488c6abb74278e354529d1c2b1a66a28b2bb8a 100644 (file)
@@ -5,8 +5,7 @@ Spring-Context: conf/*,conf/testCases/*
 Require-Bundle: 
  org.argeo.slc.support.equinox,
  org.argeo.slc.specs,
- org.argeo.slc.support.simple,
- org.argeo.dep.jemmy.nb61;bundle-version="0.2.2"
+ org.argeo.slc.support.simple
 Import-Package: 
  net.sf.cglib.core,
  net.sf.cglib.proxy,
index 525719aa4936acca48690a36d521a9b5705efed5..021f573645f78f98540ccee7b11d4048cd2df7f3 100644 (file)
@@ -56,6 +56,7 @@ public class AgentServiceImpl implements AgentService, InitializingBean,
 
        protected class PingThread extends Thread {
                public void run() {
+                       log.info("Start pinging agents.");
                        while (pingThreadActive) {
                                List<SlcAgentDescriptor> lst = slcAgentDescriptorDao
                                                .listSlcAgentDescriptors();
@@ -88,6 +89,7 @@ public class AgentServiceImpl implements AgentService, InitializingBean,
                                        }
                                }
                        }
+                       log.info("Stopped pinging agents.");
                }
 
        }
index d7ca51117467e6fe840a81901aa275397d60229a..e7899d1ae0500e72186e4155a4ca9f9338e0d633 100644 (file)
@@ -24,6 +24,7 @@ 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.JmsException;
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.core.MessagePostProcessor;
 
@@ -55,15 +56,33 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
        }
 
        public void afterPropertiesSet() throws Exception {
-               jmsTemplate.convertAndSend(agentRegister, agentDescriptor);
-               log.info("Agent #" + agentDescriptor.getUuid() + " registered to "
-                               + agentRegister);
+               try {
+                       jmsTemplate.convertAndSend(agentRegister, agentDescriptor);
+                       log.info("Agent #" + agentDescriptor.getUuid() + " registered to "
+                                       + agentRegister);
+               } catch (JmsException e) {
+                       log
+                                       .warn("Could not register agent "
+                                                       + agentDescriptor.getUuid()
+                                                       + " to server: "
+                                                       + e.getMessage()
+                                                       + ". The agent will stay offline but will keep listening for a ping all sent by server.");
+                       if (log.isTraceEnabled())
+                               log.debug("Original error.", e);
+               }
        }
 
        public void destroy() throws Exception {
-               jmsTemplate.convertAndSend(agentUnregister, agentDescriptor);
-               log.info("Agent #" + agentDescriptor.getUuid() + " unregistered from "
-                               + agentUnregister);
+               try {
+                       jmsTemplate.convertAndSend(agentUnregister, agentDescriptor);
+                       log.info("Agent #" + agentDescriptor.getUuid()
+                                       + " unregistered from " + agentUnregister);
+               } catch (JmsException e) {
+                       log.warn("Could not unregister agent " + agentDescriptor.getUuid()
+                                       + ": " + e.getMessage());
+                       if (log.isTraceEnabled())
+                               log.debug("Original error.", e);
+               }
        }
 
        public void setAgentRegister(Destination agentRegister) {
index b743f12e1fb25cefd2726227e7dc8eafeddcc1b4..4029af0a9a95619bff92fdfa788fa85c74803952 100644 (file)
@@ -7,6 +7,7 @@ import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
+import javax.jms.TextMessage;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -178,6 +179,15 @@ public class JmsAgentProxy implements SlcAgent {
                        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;
                }