package jef.database.jpa; import java.util.Collection; import java.util.Collections; import java.util.Map; import javax.persistence.Cache; import javax.persistence.EntityGraph; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnitUtil; import javax.persistence.Query; import javax.persistence.SynchronizationType; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.metamodel.Metamodel; import javax.sql.DataSource; import org.easyframe.enterprise.spring.TransactionMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jef.database.DbCfg; import jef.database.DbClient; import jef.database.cache.CacheDummy; import jef.database.jmx.JefFacade; import jef.database.meta.AbstractMetadata; import jef.database.meta.MetaHolder; import jef.tools.JefConfiguration; public class JefEntityManagerFactory implements EntityManagerFactory,MetaProvider { /** * EMF名称 */ private String name; // private CriteriaBuilderImpl cbuilder=new CriteriaBuilderImpl(this); private DbClient db; private Map<String, Object> properties; private static Logger log = LoggerFactory.getLogger(JefEntityManagerFactory.class); public EntityManager createEntityManager() { return createEntityManager(null, Collections.EMPTY_MAP); } @SuppressWarnings("rawtypes") public EntityManager createEntityManager(Map map) { return createEntityManager(SynchronizationType.SYNCHRONIZED, map); } @Override public EntityManager createEntityManager(SynchronizationType synchronizationType) { return createEntityManager(synchronizationType, Collections.EMPTY_MAP); } @Override public EntityManager createEntityManager(SynchronizationType synchronizationType, @SuppressWarnings("rawtypes") Map map) { EntityManager result = new JefEntityManager(this, map); log.debug("[JPA DEBUG]:creating EntityManager:{} at {}", result, Thread.currentThread()); return result; } public Map<String, Object> getProperties() { return properties; } public CriteriaBuilder getCriteriaBuilder() { throw new UnsupportedOperationException(); } public Cache getCache() { return CacheDummy.getInstance(); } public PersistenceUnitUtil getPersistenceUnitUtil() { throw new UnsupportedOperationException(); } public void close() { log.debug("[JPA DEBUG]:close.{}", this); if (db.isOpen()) { db.close(); } } public Metamodel getMetamodel() { return null; } public boolean isOpen() { boolean flag = db.isOpen(); log.debug("[JPA DEBUG]:isOpen - {}", flag); return flag; } public String getName() { return name; } public void setName(String name) { this.name = name; } public JefEntityManagerFactory(DbClient db) { this.db = db; JefFacade.registeEmf(db, this); } public JefEntityManagerFactory(DataSource ds) { this(ds, JefConfiguration.getInt(DbCfg.DB_CONNECTION_POOL, 3), JefConfiguration.getInt(DbCfg.DB_CONNECTION_POOL_MAX, 50), null); } public JefEntityManagerFactory(DataSource dataSource, int min, int max, TransactionMode txMode) { this.db = new DbClient(dataSource, min, max, txMode); } public DbClient getDefault() { return db; } @Override public void addNamedQuery(String name, Query query) { throw new UnsupportedOperationException(); } @Override public <T> T unwrap(Class<T> cls) { throw new UnsupportedOperationException(); } @Override public <T> void addNamedEntityGraph(String graphName, EntityGraph<T> entityGraph) { throw new UnsupportedOperationException(); } public Collection<AbstractMetadata> getEntityTypes() { return MetaHolder.getCachedModels(); } public AbstractMetadata managedType(Class<?> type) { return MetaHolder.getMeta(type); } }