diff options
Diffstat (limited to 'sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java')
-rw-r--r-- | sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java new file mode 100644 index 0000000..d48f7e5 --- /dev/null +++ b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java @@ -0,0 +1,105 @@ +package io.trygvis.persistence.sql; + +import javax.persistence.Cache; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.PersistenceException; +import javax.persistence.PersistenceUnitUtil; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.metamodel.Metamodel; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Map; + +import static java.util.Collections.emptyMap; + +public abstract class SqlEntityManagerFactory implements EntityManagerFactory { + + public final SqlUnit sqlUnit; + + private final DataSource dataSource; + + protected SqlEntityManagerFactory(SqlUnit sqlUnit, DataSource dataSource) { + this.sqlUnit = sqlUnit; + this.dataSource = dataSource; + } + + // ----------------------------------------------------------------------- + // + // ----------------------------------------------------------------------- + + protected abstract EntityManager createEntityManager(Connection c); + + // ----------------------------------------------------------------------- + // + // ----------------------------------------------------------------------- + + @Override + public EntityManager createEntityManager() { + return createEntityManager(emptyMap()); + } + + @Override + public EntityManager createEntityManager(Map map) { + try { + Connection c = dataSource.getConnection(); + return createEntityManager(c); + } catch (SQLException e) { + throw new PersistenceException("Could not get connection", e); + } + } + + @Override + public CriteriaBuilder getCriteriaBuilder() { + throw new UnsupportedOperationException(); + } + + @Override + public Metamodel getMetamodel() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isOpen() { + return true; + } + + @Override + public void close() { + } + + @Override + public Map<String, Object> getProperties() { + return emptyMap(); + } + + @Override + public Cache getCache() { + return new NoOpCache(); + } + + @Override + public PersistenceUnitUtil getPersistenceUnitUtil() { + throw new UnsupportedOperationException(); + } + + private static class NoOpCache implements Cache { + @Override + public boolean contains(Class cls, Object primaryKey) { + return false; + } + + @Override + public void evict(Class cls, Object primaryKey) { + } + + @Override + public void evict(Class cls) { + } + + @Override + public void evictAll() { + } + } +} |