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