#201 simplified JPAProvider to use delegate instead of entity manager class

This commit is contained in:
Timo Westkämper 2012-07-24 20:21:45 +03:00
parent b26b896fed
commit 23056e6f20
3 changed files with 25 additions and 33 deletions

View File

@ -31,38 +31,31 @@ public enum JPAProvider {
/**
* Hibernate
*/
HIBERNATE("org.hibernate.ejb.HibernateEntityManager", HQLTemplates.DEFAULT, "hibernate"),
HIBERNATE("org.hibernate.Session", HQLTemplates.DEFAULT),
/**
* EclipseLink
*/
ECLIPSELINK("org.eclipse.persistence.jpa.JpaEntityManager", EclipseLinkTemplates.DEFAULT, "eclipselink"),
ECLIPSELINK("org.eclipse.persistence.jpa.JpaEntityManager", EclipseLinkTemplates.DEFAULT),
/**
* OpenJPA
*/
OPEN_JPA("org.apache.openjpa.persistence.OpenJPAEntityManager", OpenJPATemplates.DEFAULT, "openjpa"),
OPEN_JPA("org.apache.openjpa.persistence.OpenJPAEntityManager", OpenJPATemplates.DEFAULT),
/**
* Generic JPA provider
*/
GENERIC("javax.persistence.EntityManager", JPQLTemplates.DEFAULT, "");
GENERIC("javax.persistence.EntityManager", JPQLTemplates.DEFAULT);
private Class<?> emClass;
private Class<?> delegateClass;
private final JPQLTemplates templates;
private final String searchKey;
/**
* @param emClassName class name of EntityManager implementation
* @param templates
*/
JPAProvider(String emClassName, JPQLTemplates templates, String searchKey) {
JPAProvider(String emClassName, JPQLTemplates templates) {
this.templates = templates;
this.searchKey = searchKey;
try {
this.emClass = Class.forName(emClassName);
this.delegateClass = Class.forName(emClassName);
} catch (ClassNotFoundException e) {}
}
@ -71,12 +64,9 @@ public enum JPAProvider {
}
public static JPAProvider get(EntityManager em) {
String propsToString = em.getEntityManagerFactory().getProperties().toString();
for (JPAProvider provider : values()) {
if (provider.emClass != null && provider.emClass.isAssignableFrom(em.getClass())) {
return provider;
}
if (propsToString.contains(provider.searchKey)) {
if (provider.delegateClass != null
&& provider.delegateClass.isAssignableFrom(em.getDelegate().getClass())) {
return provider;
}
}

View File

@ -5,7 +5,6 @@ import static org.junit.Assert.assertEquals;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
@ -36,7 +35,8 @@ public class JPAProviderTest {
public void Hibernate() {
factory = Persistence.createEntityManagerFactory("h2");
em = factory.createEntityManager();
println(em.getEntityManagerFactory().getProperties());
System.out.println(em.getDelegate().getClass());
// println(em.getEntityManagerFactory().getProperties());
assertEquals(JPAProvider.HIBERNATE, JPAProvider.get(em));
}
@ -61,7 +61,8 @@ public class JPAProviderTest {
public void EclipseLink() {
factory = Persistence.createEntityManagerFactory("h2-eclipselink");
em = factory.createEntityManager();
println(em.getEntityManagerFactory().getProperties());
System.out.println(em.getDelegate().getClass());
// println(em.getEntityManagerFactory().getProperties());
assertEquals(JPAProvider.ECLIPSELINK, JPAProvider.get(em));
}
@ -84,14 +85,18 @@ public class JPAProviderTest {
@Test
public void OpenJPA() {
// TODO
factory = Persistence.createEntityManagerFactory("derby-openjpa");
em = factory.createEntityManager();
System.out.println(em.getDelegate().getClass());
// println(em.getEntityManagerFactory().getProperties());
assertEquals(JPAProvider.OPEN_JPA, JPAProvider.get(em));
}
private void println(Map<String, Object> properties) {
for (Map.Entry<String, Object> entry : properties.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
System.out.println();
}
// private void println(Map<String, Object> properties) {
// for (Map.Entry<String, Object> entry : properties.entrySet()) {
// System.out.println(entry.getKey() + " = " + entry.getValue());
// }
// System.out.println();
// }
}

View File

@ -34,7 +34,6 @@
</properties>
</persistence-unit>
<!--
<persistence-unit name="derby-openjpa"
transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
@ -43,10 +42,8 @@
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:target/derbydb3;create=true" />
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
</properties>
</persistence-unit>
-->
<!-- hsqldb -->
@ -147,7 +144,7 @@
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:target/h2-3" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB,deleteTableContents',ForeignKeys=true)"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB',ForeignKeys=true)"/>
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
<property name="openjpa.jdbc.Schemas" value="PUBLIC"/>
<property name="openjpa.jdbc.DBDictionary" value="h2(useSchemaName=true)"/>