raimund@457: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz raimund@457: * Software engineering by Intevation GmbH raimund@457: * raimund@457: * This file is Free Software under the GNU GPL (v>=3) raimund@457: * and comes with ABSOLUTELY NO WARRANTY! Check out raimund@457: * the documentation coming with IMIS-Labordaten-Application for details. raimund@457: */ raimund@457: package de.intevation.lada.util.data; raimund@457: raimund@457: import javax.ejb.EJBTransactionRolledbackException; raimund@457: import javax.ejb.Stateless; raimund@457: import javax.ejb.TransactionAttribute; raimund@457: import javax.ejb.TransactionAttributeType; raimund@457: import javax.inject.Inject; raimund@457: import javax.persistence.EntityExistsException; raimund@457: import javax.persistence.EntityManager; raimund@457: import javax.persistence.Query; raimund@457: import javax.persistence.TransactionRequiredException; raimund@457: raimund@457: /** raimund@457: * Abstract class implementing low level data operations. raimund@457: * raimund@457: * @author Raimund Renkert raimund@457: */ raimund@457: @Stateless raimund@457: public class DataTransaction raimund@457: { raimund@457: @Inject raimund@457: protected EntityManagerProducer emp; raimund@457: raimund@457: protected String jndiPath; raimund@457: raimund@457: /** raimund@457: * Create object in the database. raimund@457: * This operation can not be undone. raimund@457: * raimund@457: * @param object The object to create raimund@457: * raimund@457: * @throws EntityExistsException raimund@457: * @throws IllegalArgumentException raimund@457: * @throws EJBTransactionRolledbackException raimund@457: * @throws TransactionRequiredException raimund@457: */ raimund@457: @TransactionAttribute(TransactionAttributeType.REQUIRED) raimund@457: public void persistInDatabase(Object object, String dataSource) raimund@457: throws EntityExistsException, raimund@457: IllegalArgumentException, raimund@457: EJBTransactionRolledbackException, raimund@457: TransactionRequiredException raimund@457: { tom@1290: EntityManager manager = emp.entityManager(dataSource); tom@1290: manager.persist(object); tom@1290: tom@1290: /* Refreshing the object is necessary because some objects use tom@1290: dynamic-insert, meaning null-valued columns are not INSERTed tom@1290: to the DB to take advantage of DB DEFAULT values, or triggers tom@1290: modify the object during INSERT. */ tom@1290: manager.refresh(object); raimund@457: } raimund@457: raimund@457: /** raimund@457: * Create object in the database. raimund@457: * This operation can not be undone. raimund@457: * raimund@457: * @param object The object to create raimund@457: * raimund@457: * @throws EntityExistsException raimund@457: * @throws IllegalArgumentException raimund@457: * @throws EJBTransactionRolledbackException raimund@457: * @throws TransactionRequiredException raimund@457: */ raimund@457: @TransactionAttribute(TransactionAttributeType.REQUIRED) raimund@457: public void updateInDatabase(Object object, String dataSource) raimund@457: throws EntityExistsException, raimund@457: IllegalArgumentException, raimund@457: EJBTransactionRolledbackException, raimund@457: TransactionRequiredException raimund@457: { raimund@457: emp.entityManager(dataSource).merge(object); raimund@457: } raimund@457: raimund@457: /** raimund@457: * Remove an object from the datebase. raimund@457: * This operation can not be undone. raimund@457: * raimund@457: * @param object The object to remove raimund@457: * raimund@457: * @throws IllegalArgumentException raimund@457: * @throws TransactionRequiredException raimund@457: */ raimund@457: @TransactionAttribute(TransactionAttributeType.REQUIRED) raimund@457: public void removeFromDatabase(Object object, String dataSource) raimund@457: throws IllegalArgumentException, raimund@700: TransactionRequiredException, raimund@700: EJBTransactionRolledbackException raimund@457: { raimund@457: EntityManager em = emp.entityManager(dataSource); raimund@457: em.remove( raimund@457: em.contains(object) ? raimund@457: object : em.merge(object)); raimund@1100: em.flush(); raimund@457: } raimund@457: raimund@457: public Query queryFromString(String sql, String dataSource) { raimund@457: EntityManager em = emp.entityManager(dataSource); raimund@457: return em.createNativeQuery(sql); raimund@457: } raimund@457: raimund@457: public EntityManager entityManager(String dataSource) { raimund@457: return emp.entityManager(dataSource); raimund@457: } raimund@457: }