001 package org.cocome.tradingsystem.testdriver;
002
003 import javax.persistence.EntityManager;
004 import javax.persistence.EntityManagerFactory;
005 import javax.persistence.EntityTransaction;
006 import javax.persistence.Persistence;
007
008 import org.cocome.tradingsystem.inventory.data.DataIfFactory;
009 import org.cocome.tradingsystem.inventory.data.persistence.PersistenceContext;
010 import org.cocome.tradingsystem.inventory.data.persistence.impl.PersistenceContextImpl;
011 import org.cocome.tradingsystem.inventory.data.store.StoreQueryIf;
012
013 /**
014 * Supporting singleton for managing the database.
015 *
016 * @author Benjamin Hummel
017 * @author $Author: hummel $
018 * @version $Rev: 63 $
019 * @levd.rating GREEN Rev: 63
020 */
021 public class DBManager {
022
023 /** The entity manager factory used here. */
024 private final EntityManagerFactory emf;
025
026 /** The object used for querying stores */
027 private final StoreQueryIf storeQuery;
028
029 /** The single instance of this manager. */
030 private static DBManager instance = null;
031
032 /** Returns the single instance of this manager. */
033 public static DBManager getInstance() {
034 if (instance == null) {
035 instance = new DBManager();
036 }
037 return instance;
038 }
039
040 /** Hidden constructor. */
041 private DBManager() {
042 emf = Persistence.createEntityManagerFactory("inventory-manager");
043 storeQuery = DataIfFactory.getInstance().getStoreQueryIf();
044 }
045
046 /** {@inheritDoc} */
047 public void persistDBObject(Object dbObject) {
048 EntityManager em = emf.createEntityManager();
049 EntityTransaction tx = null;
050 try {
051 tx = em.getTransaction();
052 tx.begin();
053 em.persist(dbObject);
054 tx.commit();
055 } finally {
056 em.close();
057 }
058 }
059
060 /** Return the store query object. */
061 public StoreQueryIf getStoreQuery() {
062 return storeQuery;
063 }
064
065 /** Creates a new persistence context, used e.g. for queries. */
066 public PersistenceContext createPersistenceContext() {
067 EntityManager em = emf.createEntityManager();
068 return new PersistenceContextImpl(em);
069 }
070 }