2013-08-29 36 views

回答

2

您可以如下檢測交易類型;

EntityManager em = emf.createEntityManager(); 

boolean isJta = false; 
try { 
    EntityTransaction et = em.getTransaction(); 
} catch (IllegalStateException ise) { 
    if (ise.getMessage().startsWith("A JTA EntityManager cannot use getTransaction")) { 
     isJta = true; 
    } 
} 

您可能需要調整錯誤信息:這一次比賽就是Hibernate(4.x版)拋出,可能的EclipseLink拋出一個稍微不同的消息(雖然可能是相同的異常類的實例)。

至於數據源或持久性單元的JNDI名稱,該類型的信息AFAIK未由JPA類公開。您可以通過使用EclipseLink(或其他ORM框架,特定於ORM框架)方法來提取它。換句話說,EntityManagerFactory實例當然是實現該接口的EclipseLink類的一個實例。我會調試一個測試,你有一個EMF的實例並查看它的字段和屬性。

否則,您可能能夠掃描JNDI目錄並選擇正確的目錄,例如,請參閱代碼here