package com.mossle.simulator.jms; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.jms.Connection; import javax.jms.ConnectionConsumer; import javax.jms.ConnectionMetaData; import javax.jms.Destination; import javax.jms.ExceptionListener; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.ServerSessionPool; import javax.jms.Session; import javax.jms.Topic; public class ProxyConnection implements Connection { private ProxyConnectionFactory proxyConnectionFactory; private String clientId; private boolean active; private boolean closed; private List<ProxySession> sessions = new ArrayList<ProxySession>(); private MessageContext messageContext = new MessageContext(); public ProxyConnection(ProxyConnectionFactory proxyConnectionFactory) { this.proxyConnectionFactory = proxyConnectionFactory; this.clientId = UUID.randomUUID().toString(); } public Session createSession(boolean transacted, int acknowledgeMode) throws JMSException { this.checkStatus(); ProxySession proxySession = new ProxySession(this); this.sessions.add(proxySession); return proxySession; } public String getClientID() throws JMSException { return clientId; } public void setClientID(String clientID) throws JMSException { this.clientId = clientID; } public ConnectionMetaData getMetaData() throws JMSException { return null; } public ExceptionListener getExceptionListener() throws JMSException { return null; } public void setExceptionListener(ExceptionListener listener) throws JMSException { } public void start() throws JMSException { this.checkStatus(); this.active = true; } public void stop() throws JMSException { this.checkStatus(); this.active = false; } public void close() throws JMSException { this.checkStatus(); this.closed = true; this.proxyConnectionFactory.removeConnection(this); this.onProducerDisconnect(); this.onConsumerDisconnect(); } public ConnectionConsumer createConnectionConsumer(Destination destination, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException { this.checkStatus(); return null; } public ConnectionConsumer createDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException { this.checkStatus(); return null; } // ~ ================================================== public void checkStatus() throws JMSException { if (this.closed) { throw new JMSException("connection " + this.clientId + " closed"); } } public void removeSession(ProxySession proxySession) { this.sessions.remove(proxySession); } public void sendMessage(Destination destination, Message message) throws JMSException { this.proxyConnectionFactory.sendMessage(messageContext, destination, message); } public Message getMessage(ProxyMessageConsumer proxyMessageConsumer) throws JMSException { return this.proxyConnectionFactory.getMessage(messageContext, proxyMessageConsumer); } public MessageConsumer createConsumer(Destination destination, ProxySession session) throws JMSException { return this.proxyConnectionFactory.createConsumer(destination, session); } public void removeMessageConsumer(ProxyMessageConsumer messageConsumer) throws JMSException { this.proxyConnectionFactory.removeMessageConsumer(messageConsumer); } public MessageProducer createProducer(Destination destination, ProxySession session) throws JMSException { return this.proxyConnectionFactory.createProducer(destination, session); } public void onConsumerConnect() { this.proxyConnectionFactory.onConsumerConnect(messageContext); } public void onProducerConnect() { this.proxyConnectionFactory.onProducerConnect(messageContext); } public void onConsumerDisconnect() { this.proxyConnectionFactory.onConsumerDisconnect(messageContext); } public void onProducerDisconnect() { this.proxyConnectionFactory.onProducerDisconnect(messageContext); } }