import java.net.UnknownHostException;
import java.util.UUID;
+import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
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 ConnectionFactory connectionFactory;
private JmsTemplate jmsTemplate;
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() + ".";
+ // Initialize JMS Template
+ jmsTemplate = new JmsTemplate(connectionFactory);
+ jmsTemplate.setMessageConverter(messageConverter);
+
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);
+ log.info("Agent #" + agentDescriptor.getUuid() + " unregistered from "
+ + agentUnregister);
}
- public String actionDestinationName(String action) {
- return agentDestinationBase + action;
+ public void setAgentRegister(Destination agentRegister) {
+ this.agentRegister = agentRegister;
}
- public void newExecution(SlcExecution slcExecution) {
- log.info("Execute SlcExecution :" + slcExecution);
- runSlcExecution(slcExecution);
+ public void setAgentUnregister(Destination agentUnregister) {
+ this.agentUnregister = agentUnregister;
}
- public void setJmsTemplate(JmsTemplate jmsTemplate) {
- this.jmsTemplate = jmsTemplate;
+ 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 void setAgentRegister(Destination agentRegister) {
- this.agentRegister = agentRegister;
+ 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 setAgentUnregister(Destination agentUnregister) {
- this.agentUnregister = agentUnregister;
+ public void setMessageConverter(MessageConverter messageConverter) {
+ this.messageConverter = messageConverter;
}
- public void setAgentDestinationPrefix(String agentDestinationPrefix) {
- this.agentDestinationPrefix = agentDestinationPrefix;
+ public void setConnectionFactory(ConnectionFactory connectionFactory) {
+ this.connectionFactory = connectionFactory;
}
}