package nl.amis.rest.hr.model.test; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import javax.persistence.Query; import nl.amis.rest.hr.model.entities.Departments; public class JavaServiceFacade { private static final boolean isAutoCommit = true; private final EntityManagerHelper entityManagerHelper; public JavaServiceFacade() { entityManagerHelper = new EntityManagerHelper("HRLocal", isAutoCommit); } public List<Departments> getAllDepartments(){ return entityManagerHelper.getEntityManager().createNamedQuery("Departments.findAll").getResultList(); } public Object queryByRange(String jpqlStmt, int firstResult, int maxResults) { Query query = entityManagerHelper.getEntityManager().createQuery(jpqlStmt); if (firstResult > 0) { query = query.setFirstResult(firstResult); } if (maxResults > 0) { query = query.setMaxResults(maxResults); } return query.getResultList(); } private class EntityManagerHelper { final private EntityManagerFactory _entityManagerFactory; final private boolean _isAutoCommit; private EntityManager _entityManager; EntityManagerHelper(String persistenceUnit, boolean isAutoCommit) { _entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnit); _isAutoCommit = isAutoCommit; } public EntityManager getEntityManager() { if (_entityManager == null) { _entityManager = _entityManagerFactory.createEntityManager(); } return _entityManager; } public EntityTransaction getEntityTransaction() { return getEntityManager().getTransaction(); } public void commitTransaction() { final EntityTransaction entityTransaction = getEntityTransaction(); if (entityTransaction.isActive()) { entityTransaction.commit(); } _closeEntityManager(); } public void rollbackTransaction() { final EntityTransaction entityTransaction = getEntityTransaction(); if (entityTransaction.isActive()) { entityTransaction.rollback(); } _closeEntityManager(); } public boolean isTransactionDirty() { return (!_isAutoCommit && getEntityTransaction().isActive()); } public Object persistEntity(Object entity) { _beginTransactionIfNeeded(); _entityManager.persist(entity); _commitTransactionIfNeeded(); return entity; } public Object mergeEntity(Object entity) { _beginTransactionIfNeeded(); entity = _entityManager.merge(entity); _commitTransactionIfNeeded(); return entity; } public void removeEntity(Object entity) { _beginTransactionIfNeeded(); _entityManager.remove(entity); _commitTransactionIfNeeded(); } private void _beginTransactionIfNeeded() { final EntityTransaction entityTransaction = getEntityTransaction(); if (!entityTransaction.isActive()) { entityTransaction.begin(); } } private void _commitTransactionIfNeeded() { if (_isAutoCommit) { commitTransaction(); } } private void _closeEntityManager() { if (_entityManager != null && _entityManager.isOpen()) { _entityManager.close(); } _entityManager = null; } } }