У меня есть служебный класс, как показано ниже. Я хочу иметь возможность использовать этот класс либо с RESOURCE_LOCAL, либо с единицами хранения JTA. Если я изменю файл persistence.xml с JTA на RESOURCE_LOCAL, мне не придется менять код.
Я попытался использовать EntityManager.getTransaction(), чтобы увидеть, есть ли активная транзакция, но вызов getTransaction() вызывает исключение, если используется JTA. Я мог бы окружить вызов getTransaction() с помощью try/catch, но я не хочу прибегать к обработке исключений для этого. EntityManager.getProperties() не показывает ничего, что указывает на JTA или RESOURCE_LOCAL.
Мне нужно каким-то образом определить, какой тип единицы персистентности использует EntityManager (или EntityManagerFactory) в приведенном ниже коде.
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(); ...