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