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    }