Aşağıda gösterildiği gibi bir yardımcı program sınıfım var. Bu sınıfı RESOURCE_LOCAL veya JTA kalıcılık birimleriyle birlikte kullanmak istiyorum. Persistence.xml dosyasını JTA'dan RESOURCE_LOCAL olarak değiştirirsem, kodu değiştirmem gerekir.EntityManager'ım JTA veya RESOURCE_LOCAL veri kaynağını mı kullandığını nasıl anlarım?
Etkin bir işlem olup olmadığını görmek için EntityManager.getTransaction() yöntemini kullanmayı denedim, ancak JTA kullanılıyorsa getTransaction() işlevi bir Özel Durum atar. Bir try/catch ile getTransaction() çağrısını çevreliyorum ama bunun için Exception işlemine başvurmak istemiyorum. EntityManager.getProperties(), JTA veya RESOURCE_LOCAL
'u gösteren hiçbir şeyi göstermiyor. EntityManager'ın (veya EntityManagerFactory) aşağıdaki kodda ne tür kalıcılık birimi kullandığını söylemenin bir yoluna ihtiyacım var.
public class CredentialsUtil {
public static final String VGBD_PU = "VGDBpu";
static Logger logger = Logger.getLogger(CredentialsUtilStatic.class);
static EntityManagerFactory emf = Persistence.createEntityManagerFactory(VGBD_PU);
public static final String sharedKey="pgpsympwd";
public static String getPassword(String username) {
String selectStr = "select pgp_sym_decrypt(pgpsympassword, '" + sharedKey + "') from credentials where username='" + username + "'";
EntityManager em =null;
String password = "";
try {
em = emf.createEntityManager();
java.util.Map<java.lang.String,java.lang.Object> propMap = em.getProperties();
logger.info(propMap.keySet().size() + " properties");
for (String key : propMap.keySet())
logger.info(key + ", " + propMap.get(key));
EntityTransaction tx = em.getTransaction(); ...
Bu JTA geri dönüşüne neden olur ... – dmatej
JPA 2.1 beri em.isJoinedTransaction() kullanabilirsiniz – dmatej