|
23 | 23 | import org.junit.After;
|
24 | 24 | import org.junit.Test;
|
25 | 25 | import org.springframework.beans.BeansException;
|
| 26 | +import org.springframework.beans.DirectFieldAccessor; |
26 | 27 | import org.springframework.beans.factory.config.BeanPostProcessor;
|
27 | 28 | import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
|
28 | 29 | import org.springframework.boot.test.EnvironmentTestUtils;
|
29 | 30 | import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
30 | 31 | import org.springframework.context.annotation.Bean;
|
31 | 32 | import org.springframework.context.annotation.Configuration;
|
| 33 | +import org.springframework.jdbc.datasource.DataSourceTransactionManager; |
32 | 34 | import org.springframework.jms.annotation.EnableJms;
|
33 | 35 | import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
|
34 | 36 | import org.springframework.jms.config.JmsListenerConfigUtils;
|
|
38 | 40 | import org.springframework.jms.core.JmsMessagingTemplate;
|
39 | 41 | import org.springframework.jms.core.JmsTemplate;
|
40 | 42 | import org.springframework.jms.listener.DefaultMessageListenerContainer;
|
| 43 | +import org.springframework.transaction.jta.JtaTransactionManager; |
41 | 44 |
|
42 | 45 | import static org.junit.Assert.assertEquals;
|
43 | 46 | import static org.junit.Assert.assertFalse;
|
44 | 47 | import static org.junit.Assert.assertNotNull;
|
| 48 | +import static org.junit.Assert.assertNull; |
| 49 | +import static org.junit.Assert.assertSame; |
45 | 50 | import static org.junit.Assert.assertTrue;
|
46 | 51 | import static org.mockito.Mockito.mock;
|
47 | 52 |
|
@@ -137,6 +142,48 @@ public void testJmsListenerContainerFactoryBackOff() {
|
137 | 142 | jmsListenerContainerFactory.getClass());
|
138 | 143 | }
|
139 | 144 |
|
| 145 | + @Test |
| 146 | + public void testDefaultContainerFactoryWithJtaTransactionManager() { |
| 147 | + this.context = createContext(TestConfiguration7.class, |
| 148 | + EnableJmsConfiguration.class); |
| 149 | + JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context |
| 150 | + .getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class); |
| 151 | + assertEquals(DefaultJmsListenerContainerFactory.class, |
| 152 | + jmsListenerContainerFactory.getClass()); |
| 153 | + DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) |
| 154 | + jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class)); |
| 155 | + assertFalse("wrong session transacted flag with JTA transactions", listenerContainer.isSessionTransacted()); |
| 156 | + assertSame(this.context.getBean(JtaTransactionManager.class), |
| 157 | + new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager")); |
| 158 | + } |
| 159 | + |
| 160 | + @Test |
| 161 | + public void testDefaultContainerFactoryNonJtaTransactionManager() { |
| 162 | + this.context = createContext(TestConfiguration8.class, |
| 163 | + EnableJmsConfiguration.class); |
| 164 | + JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context |
| 165 | + .getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class); |
| 166 | + assertEquals(DefaultJmsListenerContainerFactory.class, |
| 167 | + jmsListenerContainerFactory.getClass()); |
| 168 | + DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) |
| 169 | + jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class)); |
| 170 | + assertTrue("wrong session transacted flag with no tx manager", listenerContainer.isSessionTransacted()); |
| 171 | + assertNull(new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager")); |
| 172 | + } |
| 173 | + |
| 174 | + @Test |
| 175 | + public void testDefaultContainerFactoryNoTransactionManager() { |
| 176 | + this.context = createContext(EnableJmsConfiguration.class); |
| 177 | + JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context |
| 178 | + .getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class); |
| 179 | + assertEquals(DefaultJmsListenerContainerFactory.class, |
| 180 | + jmsListenerContainerFactory.getClass()); |
| 181 | + DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) |
| 182 | + jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class)); |
| 183 | + assertTrue("wrong session transacted flag with no tx manager", listenerContainer.isSessionTransacted()); |
| 184 | + assertNull(new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager")); |
| 185 | + } |
| 186 | + |
140 | 187 | @Test
|
141 | 188 | public void testPubSubDisabledByDefault() {
|
142 | 189 | load(TestConfiguration.class);
|
@@ -350,6 +397,26 @@ JmsListenerContainerFactory<?> jmsListenerContainerFactory(
|
350 | 397 |
|
351 | 398 | }
|
352 | 399 |
|
| 400 | + @Configuration |
| 401 | + protected static class TestConfiguration7 { |
| 402 | + |
| 403 | + @Bean |
| 404 | + JtaTransactionManager transactionManager() { |
| 405 | + return mock(JtaTransactionManager.class); |
| 406 | + } |
| 407 | + |
| 408 | + } |
| 409 | + |
| 410 | + @Configuration |
| 411 | + protected static class TestConfiguration8 { |
| 412 | + |
| 413 | + @Bean |
| 414 | + DataSourceTransactionManager transactionManager() { |
| 415 | + return mock(DataSourceTransactionManager.class); |
| 416 | + } |
| 417 | + |
| 418 | + } |
| 419 | + |
353 | 420 | @Configuration
|
354 | 421 | @EnableJms
|
355 | 422 | protected static class EnableJmsConfiguration {
|
|
0 commit comments