2012-05-29 37 views
0

如果我在persistence.xml中提到了jta和non-jta數據源,提供程序將如何識別什麼以及何時使用?有沒有辦法在某些情況下強制使用非jta數據源?我正在使用IBM支持的OpenJPA。jta和非jta在pe

某些提供程序允許聲明jta-datasource和非jta-數據源,並使用後者通過非JTA連接優化讀取(即不會與正在進行的JTA事務關聯)。這是如何工作的,如果OpenJPA支持這個? Difference between a "jta-datasource" and a " resource-local " datasource?

回答

0

很難理解爲什麼你在persistence.xml中提到了jta和non-jta數據源。您不需要聲明兩者,並且您可能需要聲明一個jta或非jta數據源。如果使用jta數據源,則將在應用程序服務器中配置它,並在persistence.xml中聲明。如果您可以'使用jta數據源,您將在persistence.xml中配置JDBC連接。

+0

看來有些提供程序優化使用非jta數據源用於執行不需要包含在事務中的查詢。在URL下面有一個示例http://webspherepersistence.blogspot.in/。尋找清楚這如何工作,如果這個工程。 –

+0

http://stackoverflow.com/questions/3217586/difference-between-a-jta-datasource-and-a-resource-local-datasource - 有些提供者甚至允許聲明一個jta-datasource和一個非jta-數據源並使用後者通過非JTA連接進行優化讀取(即不會與正在進行的JTA事務相關聯) –

2
  1. 也許你想要的是cofigure獨立的持久性單位爲數據源&然後相應地注入。現在

    <persistence-unit name="JTA_DS" transaction-type="JTA"> 
          <jta-data-source>java:JTA_DS</jta-data-source> 
    </persistence-unit> 
    <persistence-unit name="NON_JTA_DS" transaction-type="RESOURCE_LOCAL"> 
          <non-jta-data-source>java:NON_JTA_DS</non-jta-data-source> 
    </persistence-unit> 
    

    您可以創建EnityManager爲各自的持久化單元。

    @PersistenceContext(unitName="JTA_DS")
    private EntityManager _JTAManager;

    @PersistenceContext(unitName="NON_JTA_DS")
    private EntityManager _NonJTAManager;

  2. 否則,您可以手動建立EntityManagerFactory使用適當的數據源需要。您可以參考this鏈接瞭解更多詳情。

+0

您是否知道是否可以安全地爲兩個持久性單元使用相同的數據源?我試過了,似乎很好.. –

+0

@ JaqenH'ghar這是供應商的依賴,很少人可能會支持它。可以參考這裏 - http://stackoverflow.com/a/3218191/366964;這解釋了它的區別和適用的地方。 –