我目前已經使用JCA rar在Glassfish 4中部署了Jackrabbit 2.6.4。容器管理器事務和JackRabbit
我使用MySql並在Glassfish中配置了一個數據源來訪問數據庫。配置RepositoryManager時,我在Jackrabbit repository.xml中使用相同的數據源。
如果我通過@Resource註釋將資源庫注入到不會自動啓動事務的容器管理bean中,那麼所有操作都按預期工作。
如果我通過注入@Resource註解一個倉庫到EJB(這會導致容器管理的事務)我得到以下堆棧跟蹤當我嘗試使用的存儲庫:
javax.resource。 spi.LocalTransactionException:在autocommit = true時無法調用commit commit at com.sun.gjc.spi.LocalTransactionImpl.commit(LocalTransactionImpl.java:112) at com.sun.enterprise.resource.ConnectorXAResource.commit(ConnectorXAResource.java :124) ... 原因:java.sql.SQLException:autocommit = true時無法調用commit在com.mysql.jdbc.SQL上的 Error.createSQLException(SQLError.java:927) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924) 在com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1724) 在COM。 sun.gjc.spi.LocalTransactionImpl.commit(LocalTransactionImpl.java:106) ... 72更多 ]] [2013-10-28T14:49:29.646-0700] [glassfish 4.0] [警告] [jts.unexpected_error_occurred_twopc_commit ] [javax.enterprise.system.core.transaction.com.sun.jts.jtsxa] [tid:_ThreadID = 33 _ThreadName = http-listener-1(3)] [timeMillis:1382996969646] [levelValue:900] [[ JTS5067:提交中發生意外錯誤 javax.transaction.xa.XAException:javax.resource.spi.LocalTransactionException:在com.sun中,當autocommit = true時,無法調用提交 。 enterprise.resource.ConnectorXAResource.handleResourceException(ConnectorXAResource.java:115) 在com.sun.enterprise.resource.ConnectorXAResource.commit(ConnectorXAResource.java:126) ... ]
綜觀Jackrabbit文檔指出:
如果您使用數據庫持久性管理器,則配置的數據庫連接不得受外部事務管理器的控制。 Jackrabbit在更高層次上實現分佈式XA事務支持,並期望完全控制底層數據庫連接。
鑑於此,如何配置Jackrabbit和Glassfish以允許容器管理事務和Jackrabbit管理事務共同參與同一全局事務?
我曾嘗試設置Jackrabbit JCA適配器和數據源連接池以使用XA事務。我還將Jackrabbit JCA屬性bindSessionToTransaction設置爲true。這些都沒有奏效。