|
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