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;
private Destination agentRegister;
private Destination agentUnregister;
- private String agentDestinationPrefix = "agent.";
- private String agentDestinationBase;
+ private MessageConverter messageConverter;
public JmsAgent() {
try {
}
public void afterPropertiesSet() throws Exception {
- agentDestinationBase = agentDestinationPrefix
- + agentDescriptor.getUuid() + ".";
jmsTemplate.convertAndSend(agentRegister, agentDescriptor);
log.info("Agent #" + agentDescriptor.getUuid() + " registered to "
+ agentRegister);
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) {
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;
+ }
+
+
}