001 package com.mockrunner.jms; 002 003 import java.io.Serializable; 004 import java.util.ArrayList; 005 import java.util.Collections; 006 import java.util.List; 007 008 import javax.jms.JMSException; 009 import javax.jms.MessageProducer; 010 011 import com.mockrunner.mock.jms.MockConnection; 012 import com.mockrunner.mock.jms.MockMessageProducer; 013 import com.mockrunner.mock.jms.MockQueueSender; 014 import com.mockrunner.mock.jms.MockSession; 015 import com.mockrunner.mock.jms.MockTopicPublisher; 016 017 /** 018 * This class is used to create generic producers that are not 019 * associated with a destination. 020 * If you create a <code>MessageProducer</code> with a <code>null</code> 021 * destination, this class is used to create a <code>MessageProducer</code> 022 * which is not associated with any destination. 023 * If the session used to create the producer is a <code>QueueSession</code>, 024 * you'll get a <code>QueueSender</code>. For a <code>TopicSession</code>, 025 * you'll get a <code>TopicPublisher</code>. For a generic session, 026 * you'll get a generic instance of <code>MessageProducer</code>. 027 */ 028 public class GenericTransmissionManager implements Serializable 029 { 030 private MockConnection connection; 031 private MockSession session; 032 private List messageProducerList; 033 034 public GenericTransmissionManager(MockConnection connection, MockSession session) 035 { 036 this.connection = connection; 037 this.session = session; 038 messageProducerList = new ArrayList(); 039 } 040 041 /** 042 * Closes all producers. 043 */ 044 public void closeAll() 045 { 046 closeAllMessageProducers(); 047 } 048 049 /** 050 * Closes all producers. 051 */ 052 public void closeAllMessageProducers() 053 { 054 for(int ii = 0; ii < messageProducerList.size(); ii++) 055 { 056 MessageProducer producer = (MessageProducer)messageProducerList.get(ii); 057 try 058 { 059 producer.close(); 060 } 061 catch(JMSException exc) 062 { 063 064 } 065 } 066 } 067 068 /** 069 * Creates a new <code>MessageProducer</code>. 070 * @return the created <code>MessageProducer</code> 071 */ 072 public MockMessageProducer createMessageProducer() 073 { 074 MockMessageProducer producer = new MockMessageProducer(connection, session, null); 075 messageProducerList.add(producer); 076 return producer; 077 } 078 079 /** 080 * Creates a new <code>QueueSender</code>. 081 * @return the created <code>QueueSender</code> 082 */ 083 public MockQueueSender createQueueSender() 084 { 085 MockQueueSender producer = new MockQueueSender(connection, session, null); 086 messageProducerList.add(producer); 087 return producer; 088 } 089 090 /** 091 * Creates a new <code>TopicPublisher</code>. 092 * @return the created <code>TopicPublisher</code> 093 */ 094 public MockTopicPublisher createTopicPublisher() 095 { 096 MockTopicPublisher producer = new MockTopicPublisher(connection, session, null); 097 messageProducerList.add(producer); 098 return producer; 099 } 100 101 /** 102 * Returns a <code>MessageProducer</code> by its index or 103 * <code>null</code>, if no such <code>MessageProducer</code> is 104 * present. 105 * @param index the index of the <code>MessageProducer</code> 106 * @return the <code>MessageProducer</code> 107 */ 108 public MockMessageProducer getMessageProducer(int index) 109 { 110 if(messageProducerList.size() <= index || index < 0) return null; 111 return (MockMessageProducer)messageProducerList.get(index); 112 } 113 114 /** 115 * Returns the list of all <code>MessageProducer</code> objects. 116 * @return the list of <code>MessageProducer</code> objects 117 */ 118 public List getMessageProducerList() 119 { 120 return Collections.unmodifiableList(messageProducerList); 121 } 122 }