Add Atomikos and Bitronix JTA auto-configuration
Add auto-configuration for the Atomikos and Bitronix JTA libraries. See gh-947
This commit is contained in:
		
							parent
							
								
									508bd14ad9
								
							
						
					
					
						commit
						5ef136511f
					
				| 
						 | 
				
			
			@ -25,6 +25,16 @@
 | 
			
		|||
			<artifactId>spring-boot</artifactId>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<!-- Optional -->
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.atomikos</groupId>
 | 
			
		||||
			<artifactId>transactions-jdbc</artifactId>
 | 
			
		||||
			<optional>true</optional>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.atomikos</groupId>
 | 
			
		||||
			<artifactId>transactions-jta</artifactId>
 | 
			
		||||
			<optional>true</optional>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.fasterxml.jackson.core</groupId>
 | 
			
		||||
			<artifactId>jackson-databind</artifactId>
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +90,11 @@
 | 
			
		|||
			<artifactId>velocity</artifactId>
 | 
			
		||||
			<optional>true</optional>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.codehaus.btm</groupId>
 | 
			
		||||
			<artifactId>btm</artifactId>
 | 
			
		||||
			<optional>true</optional>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>org.codehaus.groovy</groupId>
 | 
			
		||||
			<artifactId>groovy-templates</artifactId>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,120 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.autoconfigure.jta;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
import javax.transaction.TransactionManager;
 | 
			
		||||
import javax.transaction.UserTransaction;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.ApplicationHome;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.boot.jta.XAConnectionFactoryWrapper;
 | 
			
		||||
import org.springframework.boot.jta.XADataSourceWrapper;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosDependsOnBeanFactoryPostProcessor;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosProperties;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosXAConnectionFactoryWrapper;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosXADataSourceWrapper;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.transaction.PlatformTransactionManager;
 | 
			
		||||
import org.springframework.transaction.jta.JtaTransactionManager;
 | 
			
		||||
import org.springframework.util.StringUtils;
 | 
			
		||||
 | 
			
		||||
import com.atomikos.icatch.config.UserTransactionService;
 | 
			
		||||
import com.atomikos.icatch.config.UserTransactionServiceImp;
 | 
			
		||||
import com.atomikos.icatch.jta.UserTransactionManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * JTA Configuration for <A href="http://www.atomikos.com/">Atomikos</a>.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Josh Long
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
@Configuration
 | 
			
		||||
@ConditionalOnClass(UserTransactionManager.class)
 | 
			
		||||
@ConditionalOnMissingBean(PlatformTransactionManager.class)
 | 
			
		||||
class AtomikosJtaConfiguration {
 | 
			
		||||
 | 
			
		||||
	@Autowired
 | 
			
		||||
	private JtaProperties jtaProperties;
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	@ConfigurationProperties(prefix = JtaProperties.PREFIX)
 | 
			
		||||
	public AtomikosProperties atomikosProperties() {
 | 
			
		||||
		return new AtomikosProperties();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean(initMethod = "init", destroyMethod = "shutdownForce")
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public UserTransactionService userTransactionService(
 | 
			
		||||
			AtomikosProperties atomikosProperties) {
 | 
			
		||||
		Properties properties = new Properties();
 | 
			
		||||
		properties.setProperty("com.atomikos.icatch.log_base_dir", getLogBaseDir());
 | 
			
		||||
		properties.putAll(atomikosProperties.asProperties());
 | 
			
		||||
		return new UserTransactionServiceImp(properties);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String getLogBaseDir() {
 | 
			
		||||
		if (StringUtils.hasLength(this.jtaProperties.getLogDir())) {
 | 
			
		||||
			return this.jtaProperties.getLogDir();
 | 
			
		||||
		}
 | 
			
		||||
		File home = new ApplicationHome().getDir();
 | 
			
		||||
		return new File(home, "transaction-logs").getAbsolutePath();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean(initMethod = "init", destroyMethod = "close")
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public UserTransactionManager atomikosTransactionManager(
 | 
			
		||||
			UserTransactionService userTransactionService) throws Exception {
 | 
			
		||||
		UserTransactionManager manager = new UserTransactionManager();
 | 
			
		||||
		manager.setStartupTransactionService(false);
 | 
			
		||||
		manager.setForceShutdown(true);
 | 
			
		||||
		return manager;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public XADataSourceWrapper xaDataSourceWrapper() {
 | 
			
		||||
		return new AtomikosXADataSourceWrapper();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public XAConnectionFactoryWrapper xaConnectionFactoryWrapper() {
 | 
			
		||||
		return new AtomikosXAConnectionFactoryWrapper();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public static AtomikosDependsOnBeanFactoryPostProcessor atomikosDependsOnBeanFactoryPostProcessor() {
 | 
			
		||||
		return new AtomikosDependsOnBeanFactoryPostProcessor();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	public JtaTransactionManager transactionManager(UserTransaction userTransaction,
 | 
			
		||||
			TransactionManager transactionManager) {
 | 
			
		||||
		return new JtaTransactionManager(userTransaction, transactionManager);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.autoconfigure.jta;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
 | 
			
		||||
import javax.transaction.TransactionManager;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.ApplicationHome;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.boot.jta.XAConnectionFactoryWrapper;
 | 
			
		||||
import org.springframework.boot.jta.XADataSourceWrapper;
 | 
			
		||||
import org.springframework.boot.jta.bitronix.BitronixDependentBeanFactoryPostProcessor;
 | 
			
		||||
import org.springframework.boot.jta.bitronix.BitronixXAConnectionFactoryWrapper;
 | 
			
		||||
import org.springframework.boot.jta.bitronix.BitronixXADataSourceWrapper;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.transaction.PlatformTransactionManager;
 | 
			
		||||
import org.springframework.transaction.jta.JtaTransactionManager;
 | 
			
		||||
import org.springframework.util.StringUtils;
 | 
			
		||||
 | 
			
		||||
import bitronix.tm.TransactionManagerServices;
 | 
			
		||||
import bitronix.tm.jndi.BitronixContext;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * JTA Configuration for <A href="http://docs.codehaus.org/display/BTM/Home">Bitronix</A>.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Josh Long
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
@Configuration
 | 
			
		||||
@ConditionalOnClass(BitronixContext.class)
 | 
			
		||||
@ConditionalOnMissingBean(PlatformTransactionManager.class)
 | 
			
		||||
class BitronixJtaConfiguration {
 | 
			
		||||
 | 
			
		||||
	@Autowired
 | 
			
		||||
	private JtaProperties jtaProperties;
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	@ConfigurationProperties(prefix = JtaProperties.PREFIX)
 | 
			
		||||
	public bitronix.tm.Configuration bitronixConfiguration(JtaProperties xxx) {
 | 
			
		||||
		bitronix.tm.Configuration config = TransactionManagerServices.getConfiguration();
 | 
			
		||||
		config.setServerId("spring-boot-jta-bitronix");
 | 
			
		||||
		File logBaseDir = getLogBaseDir();
 | 
			
		||||
		config.setLogPart1Filename(new File(logBaseDir, "part1.btm").getAbsolutePath());
 | 
			
		||||
		config.setLogPart2Filename(new File(logBaseDir, "part2.btm").getAbsolutePath());
 | 
			
		||||
		config.setDisableJmx(true);
 | 
			
		||||
		return config;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private File getLogBaseDir() {
 | 
			
		||||
		if (StringUtils.hasLength(this.jtaProperties.getLogDir())) {
 | 
			
		||||
			return new File(this.jtaProperties.getLogDir());
 | 
			
		||||
		}
 | 
			
		||||
		File home = new ApplicationHome().getDir();
 | 
			
		||||
		return new File(home, "transaction-logs");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public TransactionManager bitronixTransactionManager(
 | 
			
		||||
			bitronix.tm.Configuration configuration) {
 | 
			
		||||
		// Inject configuration to force ordering
 | 
			
		||||
		return TransactionManagerServices.getTransactionManager();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public XADataSourceWrapper xaDataSourceWrapper() {
 | 
			
		||||
		return new BitronixXADataSourceWrapper();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public XAConnectionFactoryWrapper xaConnectionFactoryWrapper() {
 | 
			
		||||
		return new BitronixXAConnectionFactoryWrapper();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	@ConditionalOnMissingBean
 | 
			
		||||
	public static BitronixDependentBeanFactoryPostProcessor atomikosDependsOnBeanFactoryPostProcessor() {
 | 
			
		||||
		return new BitronixDependentBeanFactoryPostProcessor();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
	public JtaTransactionManager transactionManager(TransactionManager transactionManager) {
 | 
			
		||||
		return new JtaTransactionManager(transactionManager);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.autoconfigure.jta;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 | 
			
		||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link EnableAutoConfiguration Auto-configuration} for JTA.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Josh Long
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
@ConditionalOnClass(javax.transaction.Transaction.class)
 | 
			
		||||
@Import({ BitronixJtaConfiguration.class, AtomikosJtaConfiguration.class })
 | 
			
		||||
@EnableConfigurationProperties(JtaProperties.class)
 | 
			
		||||
public class JtaAutoConfiguration {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.autoconfigure.jta;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.transaction.jta.JtaTransactionManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * External configuration properties for a {@link JtaTransactionManager} created by
 | 
			
		||||
 * Spring. All {@literal spring.jta.} properties are also applied to the appropriate
 | 
			
		||||
 * vendor specific configuration.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Josh Long
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
@ConfigurationProperties(prefix = JtaProperties.PREFIX, ignoreUnknownFields = true)
 | 
			
		||||
public class JtaProperties {
 | 
			
		||||
 | 
			
		||||
	public static final String PREFIX = "spring.jta";
 | 
			
		||||
 | 
			
		||||
	private String logDir;
 | 
			
		||||
 | 
			
		||||
	public void setLogDir(String logDir) {
 | 
			
		||||
		this.logDir = logDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getLogDir() {
 | 
			
		||||
		return this.logDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
 | 
			
		|||
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.jta.JtaAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchDataAutoConfiguration,\
 | 
			
		||||
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,107 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.autoconfigure.jta;
 | 
			
		||||
 | 
			
		||||
import javax.transaction.TransactionManager;
 | 
			
		||||
import javax.transaction.UserTransaction;
 | 
			
		||||
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Rule;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.rules.ExpectedException;
 | 
			
		||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 | 
			
		||||
import org.springframework.boot.jta.XAConnectionFactoryWrapper;
 | 
			
		||||
import org.springframework.boot.jta.XADataSourceWrapper;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosDependsOnBeanFactoryPostProcessor;
 | 
			
		||||
import org.springframework.boot.jta.atomikos.AtomikosProperties;
 | 
			
		||||
import org.springframework.boot.jta.bitronix.BitronixDependentBeanFactoryPostProcessor;
 | 
			
		||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.transaction.PlatformTransactionManager;
 | 
			
		||||
import org.springframework.transaction.jta.JtaTransactionManager;
 | 
			
		||||
 | 
			
		||||
import com.atomikos.icatch.config.UserTransactionService;
 | 
			
		||||
import com.atomikos.icatch.jta.UserTransactionManager;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests for {@link JtaAutoConfiguration}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Josh Long
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public class JtaAutoConfigurationTests {
 | 
			
		||||
 | 
			
		||||
	@Rule
 | 
			
		||||
	public ExpectedException thrown = ExpectedException.none();
 | 
			
		||||
 | 
			
		||||
	private AnnotationConfigApplicationContext context;
 | 
			
		||||
 | 
			
		||||
	@After
 | 
			
		||||
	public void closeContext() {
 | 
			
		||||
		if (this.context != null) {
 | 
			
		||||
			this.context.close();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void customPatformTransactionManager() throws Exception {
 | 
			
		||||
		this.context = new AnnotationConfigApplicationContext(
 | 
			
		||||
				CustomTransactionManagerConfig.class, JtaAutoConfiguration.class);
 | 
			
		||||
		this.thrown.expect(NoSuchBeanDefinitionException.class);
 | 
			
		||||
		this.context.getBean(JtaTransactionManager.class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void atomikosSanityCheck() throws Exception {
 | 
			
		||||
		this.context = new AnnotationConfigApplicationContext(JtaProperties.class,
 | 
			
		||||
				AtomikosJtaConfiguration.class);
 | 
			
		||||
		this.context.getBean(AtomikosProperties.class);
 | 
			
		||||
		this.context.getBean(UserTransactionService.class);
 | 
			
		||||
		this.context.getBean(UserTransactionManager.class);
 | 
			
		||||
		this.context.getBean(UserTransaction.class);
 | 
			
		||||
		this.context.getBean(XADataSourceWrapper.class);
 | 
			
		||||
		this.context.getBean(XAConnectionFactoryWrapper.class);
 | 
			
		||||
		this.context.getBean(AtomikosDependsOnBeanFactoryPostProcessor.class);
 | 
			
		||||
		this.context.getBean(JtaTransactionManager.class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void bitronixSanityCheck() throws Exception {
 | 
			
		||||
		this.context = new AnnotationConfigApplicationContext(JtaProperties.class,
 | 
			
		||||
				BitronixJtaConfiguration.class);
 | 
			
		||||
		this.context.getBean(bitronix.tm.Configuration.class);
 | 
			
		||||
		this.context.getBean(TransactionManager.class);
 | 
			
		||||
		this.context.getBean(XADataSourceWrapper.class);
 | 
			
		||||
		this.context.getBean(XAConnectionFactoryWrapper.class);
 | 
			
		||||
		this.context.getBean(BitronixDependentBeanFactoryPostProcessor.class);
 | 
			
		||||
		this.context.getBean(JtaTransactionManager.class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Configuration
 | 
			
		||||
	public static class CustomTransactionManagerConfig {
 | 
			
		||||
 | 
			
		||||
		@Bean
 | 
			
		||||
		public PlatformTransactionManager transactionManager() {
 | 
			
		||||
			return mock(PlatformTransactionManager.class);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -17,11 +17,12 @@
 | 
			
		|||
package org.springframework.boot.autoconfigure.orm.jpa;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import javax.sql.DataSource;
 | 
			
		||||
 | 
			
		||||
import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Rule;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
| 
						 | 
				
			
			@ -228,8 +229,10 @@ public abstract class AbstractJpaAutoConfigurationTests {
 | 
			
		|||
			factoryBean.setJpaVendorAdapter(adapter);
 | 
			
		||||
			factoryBean.setDataSource(dataSource);
 | 
			
		||||
			factoryBean.setPersistenceUnitName("manually-configured");
 | 
			
		||||
			factoryBean.setJpaPropertyMap(Collections.singletonMap("configured",
 | 
			
		||||
					"manually"));
 | 
			
		||||
			Map<String, Object> properties = new HashMap<String, Object>();
 | 
			
		||||
			properties.put("configured", "manually");
 | 
			
		||||
			properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE);
 | 
			
		||||
			factoryBean.setJpaPropertyMap(properties);
 | 
			
		||||
			return factoryBean;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta;
 | 
			
		||||
 | 
			
		||||
import javax.jms.ConnectionFactory;
 | 
			
		||||
import javax.jms.XAConnectionFactory;
 | 
			
		||||
import javax.transaction.TransactionManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Strategy interface used to wrap a JMS {@link XAConnectionFactory} enrolling it with a
 | 
			
		||||
 * JTA {@link TransactionManager}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public interface XAConnectionFactoryWrapper {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Wrap the specific {@link XAConnectionFactory} and enroll it with a JTA
 | 
			
		||||
	 * {@link TransactionManager}.
 | 
			
		||||
	 * @param connectionFactory the connection factory to wrap
 | 
			
		||||
	 * @return the wrapped connection factory
 | 
			
		||||
	 */
 | 
			
		||||
	ConnectionFactory wrapConnectionFactory(XAConnectionFactory connectionFactory)
 | 
			
		||||
			throws Exception;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta;
 | 
			
		||||
 | 
			
		||||
import javax.sql.DataSource;
 | 
			
		||||
import javax.sql.XADataSource;
 | 
			
		||||
import javax.transaction.TransactionManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Strategy interface used to wrap a JMS {@link XADataSource} enrolling it with a JTA
 | 
			
		||||
 * {@link TransactionManager}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public interface XADataSourceWrapper {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Wrap the specific {@link XADataSource} and enroll it with a JTA
 | 
			
		||||
	 * {@link TransactionManager}.
 | 
			
		||||
	 * @param dataSource the data source to wrap
 | 
			
		||||
	 * @return the wrapped data source
 | 
			
		||||
	 */
 | 
			
		||||
	DataSource wrapDataSource(XADataSource dataSource) throws Exception;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.atomikos;
 | 
			
		||||
 | 
			
		||||
import javax.jms.ConnectionFactory;
 | 
			
		||||
import javax.jms.XAConnectionFactory;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.jta.XAConnectionFactoryWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link XAConnectionFactoryWrapper} that uses an {@link AtomikosConnectionFactoryBean}
 | 
			
		||||
 * to wrap a {@link XAConnectionFactory}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public class AtomikosXAConnectionFactoryWrapper implements XAConnectionFactoryWrapper {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public ConnectionFactory wrapConnectionFactory(XAConnectionFactory connectionFactory) {
 | 
			
		||||
		AtomikosConnectionFactoryBean bean = new AtomikosConnectionFactoryBean();
 | 
			
		||||
		bean.setXaConnectionFactory(connectionFactory);
 | 
			
		||||
		return bean;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.atomikos;
 | 
			
		||||
 | 
			
		||||
import javax.sql.XADataSource;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.jta.XADataSourceWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link XADataSourceWrapper} that uses an {@link AtomikosDataSourceBean} to wrap a
 | 
			
		||||
 * {@link XADataSource}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public class AtomikosXADataSourceWrapper implements XADataSourceWrapper {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public AtomikosDataSourceBean wrapDataSource(XADataSource dataSource)
 | 
			
		||||
			throws Exception {
 | 
			
		||||
		AtomikosDataSourceBean bean = new AtomikosDataSourceBean();
 | 
			
		||||
		bean.setXaDataSource(dataSource);
 | 
			
		||||
		return bean;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.bitronix;
 | 
			
		||||
 | 
			
		||||
import javax.jms.ConnectionFactory;
 | 
			
		||||
import javax.jms.XAConnectionFactory;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.jta.XAConnectionFactoryWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link XAConnectionFactoryWrapper} that uses a Bitronix
 | 
			
		||||
 * {@link PoolingConnectionFactoryBean} to wrap a {@link XAConnectionFactory}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public class BitronixXAConnectionFactoryWrapper implements XAConnectionFactoryWrapper {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public ConnectionFactory wrapConnectionFactory(XAConnectionFactory connectionFactory) {
 | 
			
		||||
		PoolingConnectionFactoryBean pool = new PoolingConnectionFactoryBean();
 | 
			
		||||
		pool.setConnectionFactory(connectionFactory);
 | 
			
		||||
		return pool;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.bitronix;
 | 
			
		||||
 | 
			
		||||
import javax.sql.XADataSource;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.jta.XADataSourceWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link XADataSourceWrapper} that uses a Bitronix {@link PoolingDataSourceBean} to wrap
 | 
			
		||||
 * a {@link XADataSource}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 * @since 1.2.0
 | 
			
		||||
 */
 | 
			
		||||
public class BitronixXADataSourceWrapper implements XADataSourceWrapper {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public PoolingDataSourceBean wrapDataSource(XADataSource dataSource) throws Exception {
 | 
			
		||||
		PoolingDataSourceBean pool = new PoolingDataSourceBean();
 | 
			
		||||
		pool.setDataSource(dataSource);
 | 
			
		||||
		return pool;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.atomikos;
 | 
			
		||||
 | 
			
		||||
import javax.jms.ConnectionFactory;
 | 
			
		||||
import javax.jms.XAConnectionFactory;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import static org.hamcrest.Matchers.instanceOf;
 | 
			
		||||
import static org.hamcrest.Matchers.sameInstance;
 | 
			
		||||
import static org.junit.Assert.assertThat;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests for {@link AtomikosXAConnectionFactoryWrapper}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public class AtomikosXAConnectionFactoryWrapperTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void wrap() {
 | 
			
		||||
		XAConnectionFactory connectionFactory = mock(XAConnectionFactory.class);
 | 
			
		||||
		AtomikosXAConnectionFactoryWrapper wrapper = new AtomikosXAConnectionFactoryWrapper();
 | 
			
		||||
		ConnectionFactory wrapped = wrapper.wrapConnectionFactory(connectionFactory);
 | 
			
		||||
		assertThat(wrapped, instanceOf(AtomikosConnectionFactoryBean.class));
 | 
			
		||||
		assertThat(((AtomikosConnectionFactoryBean) wrapped).getXaConnectionFactory(),
 | 
			
		||||
				sameInstance(connectionFactory));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.atomikos;
 | 
			
		||||
 | 
			
		||||
import javax.sql.DataSource;
 | 
			
		||||
import javax.sql.XADataSource;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import static org.hamcrest.Matchers.instanceOf;
 | 
			
		||||
import static org.hamcrest.Matchers.sameInstance;
 | 
			
		||||
import static org.junit.Assert.assertThat;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests for {@link AtomikosXADataSourceWrapper}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public class AtomikosXADataSourceWrapperTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void wrap() throws Exception {
 | 
			
		||||
		XADataSource dataSource = mock(XADataSource.class);
 | 
			
		||||
		AtomikosXADataSourceWrapper wrapper = new AtomikosXADataSourceWrapper();
 | 
			
		||||
		DataSource wrapped = wrapper.wrapDataSource(dataSource);
 | 
			
		||||
		assertThat(wrapped, instanceOf(AtomikosDataSourceBean.class));
 | 
			
		||||
		assertThat(((AtomikosDataSourceBean) wrapped).getXaDataSource(),
 | 
			
		||||
				sameInstance(dataSource));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.bitronix;
 | 
			
		||||
 | 
			
		||||
import javax.jms.ConnectionFactory;
 | 
			
		||||
import javax.jms.XAConnectionFactory;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import static org.hamcrest.Matchers.instanceOf;
 | 
			
		||||
import static org.hamcrest.Matchers.sameInstance;
 | 
			
		||||
import static org.junit.Assert.assertThat;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests for {@link BitronixXAConnectionFactoryWrapper}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public class BitronixXAConnectionFactoryWrapperTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void wrap() {
 | 
			
		||||
		XAConnectionFactory connectionFactory = mock(XAConnectionFactory.class);
 | 
			
		||||
		BitronixXAConnectionFactoryWrapper wrapper = new BitronixXAConnectionFactoryWrapper();
 | 
			
		||||
		ConnectionFactory wrapped = wrapper.wrapConnectionFactory(connectionFactory);
 | 
			
		||||
		assertThat(wrapped, instanceOf(PoolingConnectionFactoryBean.class));
 | 
			
		||||
		assertThat(((PoolingConnectionFactoryBean) wrapped).getConnectionFactory(),
 | 
			
		||||
				sameInstance(connectionFactory));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2014 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.springframework.boot.jta.bitronix;
 | 
			
		||||
 | 
			
		||||
import javax.sql.DataSource;
 | 
			
		||||
import javax.sql.XADataSource;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import static org.hamcrest.Matchers.instanceOf;
 | 
			
		||||
import static org.hamcrest.Matchers.sameInstance;
 | 
			
		||||
import static org.junit.Assert.assertThat;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests for {@link BitronixXADataSourceWrapper}.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public class BitronixXADataSourceWrapperTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void wrap() throws Exception {
 | 
			
		||||
		XADataSource dataSource = mock(XADataSource.class);
 | 
			
		||||
		BitronixXADataSourceWrapper wrapper = new BitronixXADataSourceWrapper();
 | 
			
		||||
		DataSource wrapped = wrapper.wrapDataSource(dataSource);
 | 
			
		||||
		assertThat(wrapped, instanceOf(PoolingDataSourceBean.class));
 | 
			
		||||
		assertThat(((PoolingDataSourceBean) wrapped).getDataSource(),
 | 
			
		||||
				sameInstance(dataSource));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue