package com.mossle.simulator.jms; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Topic; public class ProxyConnectionFactory implements ConnectionFactory { private Map<String, Destination> destinationMap = new HashMap<String, Destination>(); private List<ProxyConnection> connections = new ArrayList<ProxyConnection>(); private MessageHandler messageHandler = new MemoryMessageHandler(); public Connection createConnection() throws JMSException { return createConnection(null, null); } public Connection createConnection(String userName, String password) throws JMSException { ProxyConnection proxyConnection = new ProxyConnection(this); this.connections.add(proxyConnection); return proxyConnection; } // ~ ================================================== public void removeConnection(ProxyConnection proxyConnection) { this.connections.remove(proxyConnection); } public void sendMessage(MessageContext messageContext, Destination destination, Message message) throws JMSException { String destinationName = destination.toString(); if (destination instanceof Topic) { messageHandler.sendMessageToTopic(messageContext, destinationName, message); } else { messageHandler.sendMessageToQueue(messageContext, destinationName, message); } } public Message getMessage(MessageContext messageContext, ProxyMessageConsumer proxyMessageConsumer) throws JMSException { String destinationName = proxyMessageConsumer.getDestination() .toString(); Destination destination = destinationMap.get(destinationName); if (destination instanceof Topic) { return messageHandler.consumeMessageFromTopic(messageContext, destinationName, proxyMessageConsumer.getId()); } else { return messageHandler.consumeMessageFromQueue(messageContext, destinationName); } } public MessageConsumer createConsumer(Destination destination, ProxySession session) throws JMSException { String destinationName = destination.toString(); ProxyMessageConsumer messageConsumer = new ProxyMessageConsumer(session); messageConsumer.setDestination(destination); if (destination instanceof Topic) { this.messageHandler.registerToTopic(destinationName, messageConsumer.getId()); } return messageConsumer; } public void removeMessageConsumer(ProxyMessageConsumer messageConsumer) throws JMSException { Destination destination = messageConsumer.getDestination(); if (destination instanceof Topic) { String destinationName = destination.toString(); this.messageHandler.unregisterFromTopic(destinationName, messageConsumer.getId()); } } public MessageProducer createProducer(Destination destination, ProxySession session) { ProxyMessageProducer proxyMessageProducer = new ProxyMessageProducer( session); proxyMessageProducer.setDestination(destination); return proxyMessageProducer; } public void onProducerConnect(MessageContext messageContext) { messageHandler.onProducerConnect(messageContext); } public void onConsumerConnect(MessageContext messageContext) { messageHandler.onConsumerConnect(messageContext); } public void onProducerDisconnect(MessageContext messageContext) { messageHandler.onProducerDisconnect(messageContext); } public void onConsumerDisconnect(MessageContext messageContext) { messageHandler.onConsumerDisconnect(messageContext); } }