簡體   English   中英

在JBoss / WildFly中,我應該在數據源上啟用JTA以與JPA一起使用嗎?

[英]In JBoss/WildFly should I enable JTA on data source to use with JPA?

在JBoss / WildFly中,配置數據源時,有一個JTA選項,默認情況下禁用:

<datasource jta="false" jndi-name="java:/wt/testds" pool-name="testds" enabled="true" use-ccm="false">  
...  
</datasource> 

現在我想使用JTA事務類型將此數據源與JPA關聯:

<?xml version="1.0" encoding="UTF-8"?>  
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"  
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">  
    <persistence-unit name="test" transaction-type="JTA">  
        <jta-data-source>java:/wt/testds</jta-data-source>  
    </persistence-unit>  
</persistence>  

我是否還需要在數據源上啟用JTA?

是的,當然如果你想擁有jta交易,你需​​要在數據源上啟用JTA!

您的XML / JBoss / Wildfly配置文件如下所示:

<datasource jta="true" ...

在我們的webapp持久性單元中,數據源如下所示:

<jta-data-source>java:jboss/datasources/CoreDS</jta-data-source>

transaction-type="JTA"不是必需的,至少在我的設置中沒有(Wildfly 8.1)。

在您的Java代碼中,您可以像這樣使用事務:

@TransactionManagement(TransactionManagementType.CONTAINER) // class level
public class ...
...
    @PersistenceContext(unitName = "CoreJPA")
    EntityManager em;

    @Resource
    private EJBContext ejbContext;
...
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) // method level
public void doSomething(...)

如果你需要回滾,你可以這樣做:

try {
  ...
} catch (Throwable t) {
    log.error("Exception in create work order: " + t.getMessage());
    ejbContext.setRollbackOnly();
    throw t;
}

有很多關於此的資源可以通過Google找到。

我剛剛遇到了與此問題相關的問題。

我正在運行一個容器管理事務,涉及大約20,000個插入MySQL數據庫。

交易隨機失敗,有時在大約3,500次插入后,其他時間大約6,000次插入后等。

經過調查,我發現WildFly數據源定義中的JTA選項設置為false。

將此設置更改為true可以解決問題,因此我同意@ user3472929在數據源定義中應將JTA設置為true,除非您有某些特定原因不這樣做。

我認為你應該使用jta。 如果在容器配置文件中將jta設置為false,則JPA將禁用jta,因此JPA的事務類型將為“RESOURCE_LOCAL”,這會產生一些令人討厭的副作用。 順便說一句,默認情況下,jta在容器配置文件中為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM