From 26b01b500065634eb3133dc354a0ba71b13bff56 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 7 Aug 2013 23:53:53 +0200 Subject: wip o Start of JPA implementation. --- .../persistence/sql/SqlEntityManagerFactory.java | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java (limited to 'sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlEntityManagerFactory.java') 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 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() { + } + } +} -- cgit v1.2.3