2012-01-06 120 views
0

我正在Glassfish 3.1.1上運行Oracle數據庫,並且遇到了無法回滾的交易問題,但僅限於目前的特定環境。相同的應用程序在其他機器上按預期工作。但是,同一臺機器上的兩個獨立的Glassfish域會受到影響。Glassfish:JTA/JPA交易未回滾

在受影響的環境中,我在EJB中引發RuntimeException的容器管理事務(CMT)和帶有UserTransaction#rollback()的Bean管理事務(BMT)的結果類似。

在這兩種情況下,底層的問題似乎都是JDBC連接仍然以autoCommit = true設置,即使存在正在進行的JTA事務。

我EJB/CMT試驗是這樣的:

@Named 
@Stateless 
public class TransactionTest { 

    @PersistenceContext 
    EntityManager entityManager; 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void rollbackTest() { 
    Foo foo = new Foo(); 
    entityManager.persist(foo); 
    entityManager.flush(); 

    throw new RuntimeException("should be rolled back"); 
    } 
} 

和我的BMT/UserTransaction的測試是這樣的:

public void rollbackUtxTest() throws Exception { 
    utx.begin(); 

    Foo foo = new Foo(); 
    entityManager.persist(foo); 
    entityManager.flush(); 

    utx.rollback(); 
} 

當我打電話兩種方法中,INSERT INTO FOO承諾,即使交易被回滾。

我錯過了什麼 - 也許我沒有我的連接池/數據源設置不正確?

我使用OracleConnectionPoolDataSource作爲數據源類名稱。我需要做些什麼來確保我的數據庫連接參與JTA事務?

UPDATE 1我原本以爲這是OracleConnectionPoolDataSource的問題,但事實證明它並不相關。同一個確切的池配置適用於一個環境,但不適用於其他環境。

UPDATE 2澄清,這不是一個具體的EJB/CMT問題,而是一個普遍的JTA問題。

UPDATE 3添加了有關JDBC自動提交的信息。確認persistence.xml是正確的。

+0

請附上您的persistence.xml和數據源的def您使用 – James 2012-01-10 14:34:49

+0

確定任何定製,我想我想通了......見下文 – wrschneider 2012-01-10 19:26:46

+0

答案http://java.net/jira/瀏覽/ GLASSFISH-18166 – wrschneider 2012-01-10 19:55:32

回答

3

看起來這可能是domain.xml的一個問題,可能是一個Glassfish錯誤。

persistence.xml中,我有

<jta-data-source>jdbc/TEST</jta-data-source>

domain.xml中,我有

<jdbc-resource pool-name="TEST_POOL" description="" jndi-name="jdbc/TEST"></jdbc-resource> 

但沒有相應的<resource-ref ref="jdbc/TEST"> - 丟失或拼寫錯誤。 (我相信我在該狀態下結束了通過用戶界面中創建的JNDI數據源,實現了名稱錯誤,然後用手domain.xml中jdbc-resource固定JNDI名稱,但不是在resource-ref固定。

在這種情況下, ,我注入的EntityManager仍然有效,但沒有參與JTA事務。如果我修復domain.xml,它將按預期工作。

+0

https://java.net/jira/browse/GLASSFISH-18166 – wrschneider 2013-07-08 17:43:26

+0

同樣發生在我身上。它令人難以置信的服務器啓動,我看到沒有區別的GUI和交易只是設置爲自動提交模式-.- 非常感謝提出這個問題,會讓我永遠找不到,否則^^ – icyerasor 2015-11-09 16:11:10

+1

很高興有人發現這有幫助。令人不安的是,這個問題仍然存在,Glassfish 4.0也沒有解決。 – wrschneider 2015-11-09 16:13:26