]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java
Finalize agents
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.activemq / src / main / java / org / argeo / slc / jms / JmsAgent.java
index 099498caa28409cf2225578057c8dfe5d6d65d17..6d79a662cd0d0685d0bf369e4d96103868f1a569 100644 (file)
@@ -19,9 +19,11 @@ 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.support.converter.MessageConverter;
 
 /** JMS based implementation of SLC Agent. */
-public class JmsAgent extends AbstractAgent implements SlcAgent, InitializingBean, DisposableBean {
+public class JmsAgent extends AbstractAgent implements SlcAgent,
+               InitializingBean, DisposableBean, MessageListener {
        private final static Log log = LogFactory.getLog(JmsAgent.class);
 
        private final SlcAgentDescriptor agentDescriptor;
@@ -29,8 +31,7 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, InitializingBea
        private Destination agentRegister;
        private Destination agentUnregister;
 
-       private String agentDestinationPrefix = "agent.";
-       private String agentDestinationBase;
+       private MessageConverter messageConverter;
 
        public JmsAgent() {
                try {
@@ -43,8 +44,6 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, InitializingBea
        }
 
        public void afterPropertiesSet() throws Exception {
-               agentDestinationBase = agentDestinationPrefix
-                               + agentDescriptor.getUuid() + ".";
                jmsTemplate.convertAndSend(agentRegister, agentDescriptor);
                log.info("Agent #" + agentDescriptor.getUuid() + " registered to "
                                + agentRegister);
@@ -52,17 +51,8 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, InitializingBea
 
        public void destroy() throws Exception {
                jmsTemplate.convertAndSend(agentUnregister, agentDescriptor);
-               log.info("Agent #" + agentDescriptor.getUuid() + " unregistered to "
-                               + agentRegister);
-       }
-
-       public String actionDestinationName(String action) {
-               return agentDestinationBase + action;
-       }
-
-       public void newExecution(SlcExecution slcExecution) {
-               log.info("Execute SlcExecution :" + slcExecution);
-               runSlcExecution(slcExecution);
+               log.info("Agent #" + agentDescriptor.getUuid() + " unregistered from "
+                               + agentUnregister);
        }
 
        public void setJmsTemplate(JmsTemplate jmsTemplate) {
@@ -77,8 +67,33 @@ public class JmsAgent extends AbstractAgent implements SlcAgent, InitializingBea
                this.agentUnregister = agentUnregister;
        }
 
-       public void setAgentDestinationPrefix(String agentDestinationPrefix) {
-               this.agentDestinationPrefix = agentDestinationPrefix;
+       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));
+                       }
+               } catch (JMSException e) {
+                       throw new SlcException("Cannot convert message " + message, e);
+               }
+
        }
 
+       public String getMessageSelector() {
+               String messageSelector = "slc-agentId=" + agentDescriptor.getUuid()
+                               + "";
+               // String messageSelector = "slc-agentId LIKE '%'";
+               if (log.isDebugEnabled())
+                       log.debug("Message selector: '" + messageSelector + "'");
+               return messageSelector;
+       }
+
+       public void setMessageConverter(MessageConverter messageConverter) {
+               this.messageConverter = messageConverter;
+       }
+       
+       
 }