Java EE环境的<tx:jta-transaction-manager>的注释等价物</tx:jta-transaction-manager>

时间:2014-07-15 20:38:35

标签: java spring annotations

我怎样才能达到类似的目的:

<jee:jndi-lookup id="datasSource" 
     jndi-name="jdbc/dataSourceName" expected-type="javax.sql.DataSource" />
<tx:jta-transaction-manager/>

使用注释?

@Configuration
@EnableTransactionManagement
public class AppConfig {

    @Bean
    public DataSource dataSource() {
      // What goes here?
    }

    @Bean
    public PlatformTransactionManager txManager() {
      // What goes here?
    }
}

我见过很多DataSourceTransactionManagerBasicDataSource的例子,但我找不到等效的注释驱动配置(找到容器UserTransaction等)。< / p>

1 个答案:

答案 0 :(得分:3)

我所知道的唯一方法是复制这些自定义命名空间的名称空间解析器的行为。

因此,<jee:jndi-lookup>org.springframework.ejb.config.JndiLookupBeanDefinitionParser处理,终极创建一个bean,它是JndiObjectFactoryBean的实例,带有传入的属性。

类似地,<tx:jta-transaction-manager/>org.springframework.transaction.config.JtaTransactionManagerBeanDefinitionParser处理,并且基于运行时环境,返回类的特定实例。

您可以使用的Spring 4的一个简洁功能是@Conditional(参考here)。使用@Conditional并使用名为ConditionalOnClass的{​​{3}}条件实现(引用Spring-Boot),您可以复制<tx...这样的行为:

@Configuration
@ConditionalOnClass(name="weblogic.transaction.UserTransaction")
public class WebLogicTxMgrConfig {

    @Bean
    public JtaTransactionManager txManager() {
        return new WebLogicJtaTransactionManager();
    }

}

我知道这不是一个完整的答案,但希望能帮助您创建相关配置。