1   package org.jencks.samples.outbound;
2   
3   import javax.jms.ConnectionFactory;
4   import javax.jms.Queue;
5   
6   import org.springframework.jms.core.JmsTemplate;
7   import org.springframework.transaction.PlatformTransactionManager;
8   import org.springframework.transaction.TransactionDefinition;
9   import org.springframework.transaction.TransactionStatus;
10  import org.springframework.transaction.support.DefaultTransactionDefinition;
11  
12  public abstract class AbstractJmsOutboundMessagingTest extends AbstractDependencyInjectionSpringContextTests {
13  
14  	public final static String TEST_MESSAGE="test message";
15  	
16  	private ConnectionFactory connectionFactory;
17  	private Queue queue;
18  	private PlatformTransactionManager transactionManager;
19  	
20  	public PlatformTransactionManager getTransactionManager() {
21  		return transactionManager;
22  	}
23  
24  	public void setTransactionManager(PlatformTransactionManager transactionManager) {
25  		this.transactionManager = transactionManager;
26  	}
27  
28  	public Queue getQueue() {
29  		return queue;
30  	}
31  
32  	public void setQueue(Queue queue) {
33  		this.queue = queue;
34  	}
35  
36  	public ConnectionFactory getConnectionFactory() {
37  		return connectionFactory;
38  	}
39  
40  	public void setConnectionFactory(ConnectionFactory connectionFactory) {
41  		this.connectionFactory = connectionFactory;
42  	}
43  
44  	public void testOutboundWithCommit() throws Exception {
45  		//Send the message in a JTA transaction
46  		DefaultTransactionDefinition definition=new DefaultTransactionDefinition();
47  		definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
48  		TransactionStatus status=null;
49  		try {
50  			status=transactionManager.getTransaction(definition);
51  			JmsTemplate template=new JmsTemplate(getConnectionFactory());
52  			template.convertAndSend(queue,TEST_MESSAGE);
53  			transactionManager.commit(status);
54  		} catch(Exception ex) {
55  			ex.printStackTrace();
56  			transactionManager.rollback(status);
57  			fail("Undesired exception.");
58  		}
59  
60  		//Check if the message has been sent
61  		checkIfMessageExist(TEST_MESSAGE);
62  	}
63  
64  	protected void checkIfMessageExist(String sentMessage) {
65  		JmsTemplate template=new JmsTemplate(getConnectionFactory());
66  		template.setReceiveTimeout(10);
67  		String receivedMessage=(String)template.receiveAndConvert(queue);
68  		assertEquals(sentMessage,receivedMessage);
69  	}
70  
71  	public void testOutboundWithRollback() throws Exception {
72  		//Send the message in a JTA transaction
73  		DefaultTransactionDefinition definition=new DefaultTransactionDefinition();
74  		definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
75  		TransactionStatus status=null;
76  		try {
77  			status=transactionManager.getTransaction(definition);
78  			JmsTemplate template=new JmsTemplate(getConnectionFactory());
79  			template.convertAndSend(queue,TEST_MESSAGE);
80  			transactionManager.rollback(status);
81  		} catch(Exception ex) {
82  			ex.printStackTrace();
83  			transactionManager.rollback(status);
84  			fail("Undesired exception.");
85  		}
86  
87  		//Check if the message has not been sent
88  		checkIfMessageNotExist();
89  	}
90  
91  	protected void checkIfMessageNotExist() {
92  		JmsTemplate template=new JmsTemplate(getConnectionFactory());
93  		template.setReceiveTimeout(10);
94  		String receivedMessage=null;
95  		receivedMessage=(String)template.receiveAndConvert(queue);
96  		assertNull(receivedMessage);
97  	}
98  }