1
是否可以使用EclipseLink在Bean Managed Transaction中檢測事務類型(JTA或Resource Local)? 如果是,該怎麼辦?如何檢測事務的類型:來自java代碼的JTA或Resource Local?
其實我需要檢測事務類型和JNDI名稱,如果可能的話在java類中。
是否可以使用EclipseLink在Bean Managed Transaction中檢測事務類型(JTA或Resource Local)? 如果是,該怎麼辦?如何檢測事務的類型:來自java代碼的JTA或Resource Local?
其實我需要檢測事務類型和JNDI名稱,如果可能的話在java類中。
您可以如下檢測交易類型;
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。
你是什麼意思的「JNDI名稱」 - 持久性單元?的數據源? – Marco