/* * Copyright (C) 2010 Mathieu Baudier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.argeo.slc.jms; import java.util.List; import java.util.UUID; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import org.argeo.slc.msg.ReferenceList; import org.argeo.slc.runtime.SlcAgent; import org.argeo.slc.runtime.SlcAgentFactory; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessagePostProcessor; public class JmsAgentProxyFactory implements SlcAgentFactory { private Destination requestDestination; private Destination responseDestination; private Destination pingAllDestination; private JmsTemplate jmsTemplate; public SlcAgent getAgent(String uuid) { return new JmsAgentProxy(uuid, requestDestination, responseDestination, jmsTemplate); } public void pingAll(List activeAgentIds) { ReferenceList referenceList = new ReferenceList(activeAgentIds); jmsTemplate.convertAndSend(pingAllDestination, referenceList, new MessagePostProcessor() { public Message postProcessMessage(Message message) throws JMSException { message.setJMSCorrelationID(UUID.randomUUID() .toString()); message.setStringProperty(JmsAgent.PROPERTY_QUERY, JmsAgent.QUERY_PING_ALL); return message; } }); } public void setRequestDestination(Destination requestDestination) { this.requestDestination = requestDestination; } public void setResponseDestination(Destination responseDestination) { this.responseDestination = responseDestination; } public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public void setPingAllDestination(Destination pingAllDestination) { this.pingAllDestination = pingAllDestination; } }