Merge branch '1.2.x'

This commit is contained in:
Stephane Nicoll
2015-07-01 13:00:07 -07:00
2 changed files with 70 additions and 0 deletions

View File

@@ -61,6 +61,9 @@ class JmsAnnotationDrivenConfiguration {
if (this.transactionManager != null) {
factory.setTransactionManager(this.transactionManager);
}
else {
factory.setSessionTransacted(true);
}
if (this.destinationResolver != null) {
factory.setDestinationResolver(this.destinationResolver);
}

View File

@@ -23,12 +23,14 @@ import org.apache.activemq.pool.PooledConnectionFactory;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.BeansException;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
import org.springframework.boot.test.EnvironmentTestUtils;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerConfigUtils;
@@ -38,10 +40,13 @@ import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.transaction.jta.JtaTransactionManager;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -137,6 +142,48 @@ public class JmsAutoConfigurationTests {
jmsListenerContainerFactory.getClass());
}
@Test
public void testDefaultContainerFactoryWithJtaTransactionManager() {
this.context = createContext(TestConfiguration7.class,
EnableJmsConfiguration.class);
JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context
.getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class);
assertEquals(DefaultJmsListenerContainerFactory.class,
jmsListenerContainerFactory.getClass());
DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory)
jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class));
assertFalse("wrong session transacted flag with JTA transactions", listenerContainer.isSessionTransacted());
assertSame(this.context.getBean(JtaTransactionManager.class),
new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager"));
}
@Test
public void testDefaultContainerFactoryNonJtaTransactionManager() {
this.context = createContext(TestConfiguration8.class,
EnableJmsConfiguration.class);
JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context
.getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class);
assertEquals(DefaultJmsListenerContainerFactory.class,
jmsListenerContainerFactory.getClass());
DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory)
jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class));
assertTrue("wrong session transacted flag with no tx manager", listenerContainer.isSessionTransacted());
assertNull(new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager"));
}
@Test
public void testDefaultContainerFactoryNoTransactionManager() {
this.context = createContext(EnableJmsConfiguration.class);
JmsListenerContainerFactory<?> jmsListenerContainerFactory = this.context
.getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class);
assertEquals(DefaultJmsListenerContainerFactory.class,
jmsListenerContainerFactory.getClass());
DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory)
jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class));
assertTrue("wrong session transacted flag with no tx manager", listenerContainer.isSessionTransacted());
assertNull(new DirectFieldAccessor(listenerContainer).getPropertyValue("transactionManager"));
}
@Test
public void testPubSubDisabledByDefault() {
load(TestConfiguration.class);
@@ -350,6 +397,26 @@ public class JmsAutoConfigurationTests {
}
@Configuration
protected static class TestConfiguration7 {
@Bean
JtaTransactionManager transactionManager() {
return mock(JtaTransactionManager.class);
}
}
@Configuration
protected static class TestConfiguration8 {
@Bean
DataSourceTransactionManager transactionManager() {
return mock(DataSourceTransactionManager.class);
}
}
@Configuration
@EnableJms
protected static class EnableJmsConfiguration {