簡體   English   中英

如何獲取多個持久性單元的EntityManager

[英]How to get EntityManager(s) for mulitple persistence units

我正在編寫在WebSphere Liberty Profile 8.5.5中運行的JEE7應用程序。 我們正在使用JPA(通過WLP中的Eclipselink實現)。

我在同一個“ persistence.xml”文件中有多個持久性單元。 我還需要訪問同一課程中的其中兩個單元。

嘗試使用第二個EntityManager時出現運行時錯誤:

@PersistenceContext(unitName = "wwer-list")
private EntityManager entityManagerWwerList;
@PersistenceContext(unitName = "main-dashboard")
private EntityManager entityManagerMainDashboard;

E WTRN0062E: An illegal attempt to use multiple resources that have only one-phase capability has occurred within a global transaction.  

我如何擺脫這個錯誤?

另外,我正在使用的所有表格僅需要閱讀。 那么,如何指定我只希望對JPA具有只讀訪問權限?

出現此問題的原因是,您的一個數據源使用ConnectionPoolDataSource配置為(單階段提交),而另一個數據源則配置了XADataSource。

如果要繼續使用相同的數據源配置,則必須將服務器配置更新為“接受啟發式危害”。

在管理控制台中,單擊EAR,然后選中“接受啟發式危害”復選框。 重新啟動服務器。

啟用最后參與者支持的此鏈接也可能會有所幫助。 http://www.ibm.com/support/knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/webui_pme/ui/ueac_laoextensionsettings.html

如果沒有您的persistence.xml和server.xml配置,我無法確定,但是看起來支持<persistence-unit>配置的<dataSource>元素不具有XA功能。

默認情況下, <dataSource>應該是javax.sql.XADataSource (因此具有XA功能),但是,如果使用的是不提供XADataSource實現的JDBC驅動程序,Liberty將選擇一個更簡單的DataSource實現(即javax.sql.ConnectionPoolDataSource或純javax.sql.DataSource )。

全局事務在您發出UserTransaction.begin()一直持續到您發出commit()rollback()為止。 您還可以通過其他方式進行全球交易。

由於您需要只讀訪問權限,因此將DataSources轉換為XA可能會過大。 相反,嘗試從等式中消除全局事務。 如果無法消除全局事務,則可以通過以下方式在server.xml中指定XADataSource:

<dataSource type="javax.sql.XADataSource" ...>
    <jdbcDriver .../>
    <properties .../>
</dataSource>

暫無
暫無

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

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