2016-06-08 126 views
0

工作實際上,我用我的Spring Java配置 兩種事務管理器對象如下圖所示@EnableTransactionManagment註釋不帶彈簧的JtaTransactionManager

@Bean("jtaTranx") 
    public PlatformTransactionManager jtaTransactionMangaer(){ 
     return new JtaTransactionManager(); 
    } 

    @Bean 
    @Primary 
    public PlatformTransactionManager transactionManager() { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(entityManagerFactory()); 
     return transactionManager; 
    } 

與@Configuration和@EnableTransactionManagment註釋一流水平。 當我試圖使用@Transactional做一些事務時,我得到一個異常無法在管理事務中執行事務,任何人都可以讓我知道如何解決這個問題。

+0

請添加失敗的代碼。 – manish

+1

爲什麼在使用JTA時需要2個交易管理器?在這種情況下,你應該只有一個。 –

+0

我們還需要查看錯誤。 – Roman

回答

0

我能夠使用嵌入式JtaTransactionManager解決此問題。我已採取atomikos參考實施形式here

@Bean 
    @Primary 
    public PlatformTransactionManager transactionManager() throws PropertyVetoException, NamingException { 
     EntityManagerFactory factory = entityManagerFactory().getObject(); 
     return new JpaTransactionManager(factory); 
    } 

    @Bean(name = "jtaTransactionManager") 
    public PlatformTransactionManager jtaTransactionManager() throws Throwable { 
     UserTransaction userTransaction = userTransaction() ; 
     TransactionManager transactionManager = atomikosTransactionManager() ; 
     return new JtaTransactionManager(userTransaction, transactionManager); 
    } 

    @Bean 
    public UserTransaction userTransaction() throws Throwable { 
     UserTransactionImp userTransactionImp = new UserTransactionImp(); 
     userTransactionImp.setTransactionTimeout(10000); 
     return userTransactionImp; 
    } 

    @Bean(initMethod = "init", destroyMethod = "close") 
    public TransactionManager atomikosTransactionManager() throws Throwable { 
     UserTransactionManager userTransactionManager = new UserTransactionManager(); 
     userTransactionManager.setForceShutdown(false); 
     return userTransactionManager; 
    }