
br.com.persistence.transaction.Transaction Maven / Gradle / Ivy
package br.com.persistence.transaction;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.annotation.PreDestroy;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.persistence.EntityManager;
import br.com.persistence.dao.DAO;
import br.com.persistence.manager.Session;
import br.com.persistence.model.DatabaseConfig;
public class Transaction implements Serializable {
private static final long serialVersionUID = 1L;
private Map entityManagers;
private Session session;
private TransactionalAction transactionalAction;
public Transaction(Session session) {
this.session = session;
transactionalAction = TransactionalAction.COMMIT;
entityManagers = new HashMap();
}
@SuppressWarnings("unchecked")
public EntityManager entityManagerFactory(InjectionPoint injectionPoint) {
Class> dao = injectionPoint.getMember().getDeclaringClass();
if (dao.getSuperclass().equals(DAO.class)) {
return entityManagerFactory((Class extends DAO>>) dao);
}
throw new NullPointerException(
"Classe " + dao.getSimpleName() + " nao eh um tipo DAO valido");
}
public EntityManager entityManagerFactory(Class extends DAO>> dao) {
DatabaseConfig database = session.getConfig(dao);
EntityManager entityManager;
if (entityManagers.containsKey(database.getKey())) {
entityManager = entityManagers.get(database.getKey());
} else {
entityManager = session.getEntityManager(database);
entityManagers.put(database.getKey(), entityManager);
}
if (!entityManager.getTransaction().isActive())
entityManager.getTransaction().begin();
return entityManager;
}
public int getOpenedEntityManager() {
return entityManagers.size();
}
public void setTransactionalAction(TransactionalAction transactionalAction) {
this.transactionalAction = transactionalAction;
}
@PreDestroy
public void finalize() {
Set keys = entityManagers.keySet();
for (String key : keys) {
closeEntityManager(entityManagers.get(key));
}
entityManagers.clear();
}
public void commit() {
this.transactionalAction = TransactionalAction.COMMIT;
finalize();
}
public void rollback() {
this.transactionalAction = TransactionalAction.ROLLBACK;
finalize();
}
private void closeEntityManager(EntityManager entityManager) {
if (entityManager != null) {
if (entityManager.isOpen()) {
if (entityManager.getTransaction().isActive()) {
if (transactionalAction.equals(TransactionalAction.COMMIT)) {
entityManager.getTransaction().commit();
} else {
entityManager.getTransaction().rollback();
}
}
entityManager.close();
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy