0


我正在研究在我们的项目中使用 Spring Boot 的原型。我们在生产中有一个 JBoss 服务器,我正在考虑使用像 Atomikos 这样的嵌入式事务管理器对 Undertow 嵌入式服务器运行集成测试,因为存在我必须重用的 persistence.xml。我的测试应用上下文文件有以下几行:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@EnableAutoConfiguration
@IntegrationTest("server.port:0")
@ActiveProfiles("test")
public abstract class TestApplicationContext  {
...
}

我还添加了一个自定义测试配置:

@Configuration
public class TestConfiguration {
    @Value("${spring.jpa.hibernate.dialect}")
    private String dialectClassName;

    @Value("${spring.jpa.hibernate.transaction.manager_lookup_class}")
    private String transactionManagerClass;

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        return new UndertowEmbeddedServletContainerFactory(9000);  // Don't know if this can be avoided using some properties
    }

    @Bean
    @ConfigurationProperties(prefix = DataSourceProperties.PREFIX)
    public DataSource dataSource() throws Exception {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
                                                                       DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean =
                builder.dataSource(dataSource).persistenceUnit("main").build();
        Properties additionalProperties = new Properties();
        additionalProperties.put("hibernate.dialect", dialectClassName);
        additionalProperties.put("hibernate.transaction.manager_lookup_class", transactionManagerClass);
        entityManagerFactoryBean.setJpaProperties(additionalProperties);
        return entityManagerFactoryBean;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        // this should not be needed if I have included Atomikos but it seems to pick 
        // JPA Transaction manager still and fails with the famous NullPointerException at
        // CMTTransaction class - because it cannot find a JTA environment
        // return new JtaTransactionManager(userTransaction, transactionManager);
    }
}

我对 Atomikos 的 gradle 包括:

testCompile('org.springframework.boot:spring-boot-starter-jta-atomikos')

我正在使用 Spring Boot 1.2.0-RC2。

有人能指出我做错了什么或如何解决这个问题吗?

谢谢,
稻田

4

0 回答 0