You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/04/07 23:29:41 UTC
tomee git commit: jpa 2.1 infra (we still need openjpa for full impl)
Repository: tomee
Updated Branches:
refs/heads/master fd572f8dd -> f3f3c7b9f
jpa 2.1 infra (we still need openjpa for full impl)
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/f3f3c7b9
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/f3f3c7b9
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/f3f3c7b9
Branch: refs/heads/master
Commit: f3f3c7b9fd38ee309e1e3d00b5a48ea2e1702de2
Parents: fd572f8
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue Apr 7 23:29:26 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue Apr 7 23:29:26 2015 +0200
----------------------------------------------------------------------
.../classic/ReloadableEntityManagerFactory.java | 51 ++++++++
.../openejb/persistence/JtaEntityManager.java | 121 ++++++++++++++++++-
.../persistence/QueryLogEntityManager.java | 60 +++++++++
.../java/org/apache/openejb/jee/JaxbJavaee.java | 4 +-
.../org/apache/openejb/jee/Persistence.java | 2 +-
.../jee/jpa/unit/JaxbPersistenceFactory.java | 27 +++--
6 files changed, 249 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
index cae1834..8b4bb59 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
@@ -44,10 +44,13 @@ import javax.management.ObjectName;
import javax.management.openmbean.TabularData;
import javax.naming.NamingException;
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.SharedCacheMode;
+import javax.persistence.SynchronizationType;
import javax.persistence.ValidationMode;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.metamodel.Metamodel;
@@ -169,6 +172,54 @@ public class ReloadableEntityManagerFactory implements EntityManagerFactory, Ser
}
@Override
+ public EntityManager createEntityManager(final SynchronizationType synchronizationType) {
+ EntityManager em;
+ try {
+ em = delegate.createEntityManager(synchronizationType);
+ } catch (final LinkageError le) {
+ em = delegate.createEntityManager(synchronizationType);
+ }
+
+ if (logCriteriaJpql) {
+ return new QueryLogEntityManager(em, logCriteriaJpqlLevel);
+ }
+ return em;
+ }
+
+ @Override
+ public EntityManager createEntityManager(final SynchronizationType synchronizationType, final Map map) {
+ EntityManager em;
+ try {
+ em = delegate.createEntityManager(synchronizationType, map);
+ } catch (final LinkageError le) {
+ em = delegate.createEntityManager(synchronizationType, map);
+ }
+
+ if (logCriteriaJpql) {
+ return new QueryLogEntityManager(em, logCriteriaJpqlLevel);
+ }
+ return em;
+ }
+
+ @Override
+ public <T> T unwrap(final Class<T> cls) {
+ if (cls.isAssignableFrom(getClass())) {
+ return cls.cast(this);
+ }
+ return delegate.unwrap(cls);
+ }
+
+ @Override
+ public void addNamedQuery(final String name, final Query query) {
+ delegate.addNamedQuery(name, query);
+ }
+
+ @Override
+ public <T> void addNamedEntityGraph(final String graphName, final EntityGraph<T> entityGraph) {
+ delegate.addNamedEntityGraph(graphName, entityGraph);
+ }
+
+ @Override
public CriteriaBuilder getCriteriaBuilder() {
return delegate.getCriteriaBuilder();
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java b/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
index 1dfb8b8..e5bfced 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
@@ -24,21 +24,26 @@ import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.reflection.Reflections;
+import javax.persistence.EntityGraph;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.Query;
+import javax.persistence.StoredProcedureQuery;
import javax.persistence.TransactionRequiredException;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.metamodel.Metamodel;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@@ -647,7 +652,9 @@ public class JtaEntityManager implements EntityManager, Serializable {
}
private static enum Op {
- clear, close, contains, createNamedQuery, createNativeQuery, createQuery, find, flush, getFlushMode, getReference, getTransaction, lock, merge, refresh, remove, setFlushMode, persist, detach, getLockMode, unwrap, setProperty, getCriteriaBuilder, getProperties, getMetamodel, joinTransaction, getDelegate;
+ clear, close, contains, createNamedQuery, createNativeQuery, createQuery, find, flush, getFlushMode, getReference, getTransaction, lock, merge, refresh, remove, setFlushMode, persist, detach, getLockMode, unwrap, setProperty, getCriteriaBuilder, getProperties, getMetamodel, joinTransaction, getDelegate,
+ // JPA 2.1
+ createNamedStoredProcedureQuery, createStoredProcedureQuery, createEntityGraph, getEntityGraph, getEntityGraphs, isJoinedToTransaction;
public Timer start(final JtaEntityManager em) {
return new Timer(this, em);
@@ -658,4 +665,116 @@ public class JtaEntityManager implements EntityManager, Serializable {
protected Object writeReplace() throws ObjectStreamException {
return new IntraVmArtifact(this, true);
}
+
+ // TODO: JPA 2.1 methods doesn't have yet proxying
+
+ @Override
+ public StoredProcedureQuery createNamedStoredProcedureQuery(final String name) {
+ final Timer timer = Op.createNamedStoredProcedureQuery.start(this);
+ try {
+ return getEntityManager().createNamedStoredProcedureQuery(name);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName) {
+ final Timer timer = Op.createNamedStoredProcedureQuery.start(this);
+ try {
+ return getEntityManager().createStoredProcedureQuery(procedureName);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName, final Class... resultClasses) {
+ final Timer timer = Op.createStoredProcedureQuery.start(this);
+ try {
+ return getEntityManager().createStoredProcedureQuery(procedureName, resultClasses);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName, final String... resultSetMappings) {
+ final Timer timer = Op.createStoredProcedureQuery.start(this);
+ try {
+ return getEntityManager().createStoredProcedureQuery(procedureName, resultSetMappings);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public Query createQuery(final CriteriaUpdate updateQuery) {
+ final Timer timer = Op.createQuery.start(this);
+ try {
+ return getEntityManager().createQuery(updateQuery);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public Query createQuery(final CriteriaDelete deleteQuery) {
+ final Timer timer = Op.createQuery.start(this);
+ try {
+ return getEntityManager().createQuery(deleteQuery);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public <T> EntityGraph<T> createEntityGraph(final Class<T> rootType) {
+ final Timer timer = Op.createEntityGraph.start(this);
+ try {
+ return getEntityManager().createEntityGraph(rootType);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public EntityGraph<?> createEntityGraph(final String graphName) {
+ final Timer timer = Op.createEntityGraph.start(this);
+ try {
+ return getEntityManager().createEntityGraph(graphName);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public EntityGraph<?> getEntityGraph(final String graphName) {
+ final Timer timer = Op.getEntityGraph.start(this);
+ try {
+ return getEntityManager().getEntityGraph(graphName);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public <T> List<EntityGraph<? super T>> getEntityGraphs(final Class<T> entityClass) {
+ final Timer timer = Op.getEntityGraphs.start(this);
+ try {
+ return getEntityManager().getEntityGraphs(entityClass);
+ } finally {
+ timer.stop();
+ }
+ }
+
+ @Override
+ public boolean isJoinedToTransaction() {
+ final Timer timer = Op.isJoinedToTransaction.start(this);
+ try {
+ return getEntityManager().isJoinedToTransaction();
+ } finally {
+ timer.stop();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-core/src/main/java/org/apache/openejb/persistence/QueryLogEntityManager.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/persistence/QueryLogEntityManager.java b/container/openejb-core/src/main/java/org/apache/openejb/persistence/QueryLogEntityManager.java
index 75548b0..798121a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/persistence/QueryLogEntityManager.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/persistence/QueryLogEntityManager.java
@@ -17,16 +17,21 @@
package org.apache.openejb.persistence;
+import javax.persistence.EntityGraph;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.Query;
+import javax.persistence.StoredProcedureQuery;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.metamodel.Metamodel;
+import java.util.List;
import java.util.Map;
public class QueryLogEntityManager implements EntityManager {
@@ -164,6 +169,16 @@ public class QueryLogEntityManager implements EntityManager {
}
@Override
+ public Query createQuery(final CriteriaUpdate updateQuery) {
+ return delegate.createQuery(updateQuery);
+ }
+
+ @Override
+ public Query createQuery(final CriteriaDelete deleteQuery) {
+ return delegate.createQuery(deleteQuery);
+ }
+
+ @Override
public <T> TypedQuery<T> createQuery(final String qlString, final Class<T> resultClass) {
return delegate.createQuery(qlString, resultClass);
}
@@ -194,11 +209,36 @@ public class QueryLogEntityManager implements EntityManager {
}
@Override
+ public StoredProcedureQuery createNamedStoredProcedureQuery(final String name) {
+ return delegate.createNamedStoredProcedureQuery(name);
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName) {
+ return delegate.createStoredProcedureQuery(procedureName);
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName, final Class... resultClasses) {
+ return delegate.createStoredProcedureQuery(procedureName, resultClasses);
+ }
+
+ @Override
+ public StoredProcedureQuery createStoredProcedureQuery(final String procedureName, final String... resultSetMappings) {
+ return delegate.createStoredProcedureQuery(procedureName, resultSetMappings);
+ }
+
+ @Override
public void joinTransaction() {
delegate.joinTransaction();
}
@Override
+ public boolean isJoinedToTransaction() {
+ return delegate.isJoinedToTransaction();
+ }
+
+ @Override
public <T> T unwrap(final Class<T> cls) {
return delegate.unwrap(cls);
}
@@ -237,4 +277,24 @@ public class QueryLogEntityManager implements EntityManager {
public Metamodel getMetamodel() {
return delegate.getMetamodel();
}
+
+ @Override
+ public <T> EntityGraph<T> createEntityGraph(final Class<T> rootType) {
+ return delegate.createEntityGraph(rootType);
+ }
+
+ @Override
+ public EntityGraph<?> createEntityGraph(final String graphName) {
+ return delegate.createEntityGraph(graphName);
+ }
+
+ @Override
+ public EntityGraph<?> getEntityGraph(final String graphName) {
+ return delegate.getEntityGraph(graphName);
+ }
+
+ @Override
+ public <T> List<EntityGraph<? super T>> getEntityGraphs(final Class<T> entityClass) {
+ return delegate.getEntityGraphs(entityClass);
+ }
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java
index ff1e2db..a3e2412 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java
@@ -318,13 +318,13 @@ public class JaxbJavaee {
}
public static class NoSourceFilter extends XMLFilterImpl {
- private static final InputSource EMPTY_INPUT_SOURCE = new InputSource(new ByteArrayInputStream(new byte[0]));
+ protected static final InputSource EMPTY_INPUT_SOURCE = new InputSource(new ByteArrayInputStream(new byte[0]));
public NoSourceFilter(final XMLReader xmlReader) {
super(xmlReader);
}
- private static String eeUri(final String uri) {
+ protected String eeUri(final String uri) {
// if ee 7 then switch back on ee 6 to not break compatibility - to rework surely when we'll be fully ee 7
return "http://xmlns.jcp.org/xml/ns/javaee".equals(uri) ? "http://java.sun.com/xml/ns/javaee": uri;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-jee/src/main/java/org/apache/openejb/jee/Persistence.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Persistence.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Persistence.java
index 77dbace..06efd4a 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Persistence.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Persistence.java
@@ -135,7 +135,7 @@ public class Persistence {
*/
public java.lang.String getVersion() {
if (version == null) {
- return "2.0";
+ return "2.1";
} else {
return version;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/f3f3c7b9/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
index 43e7e7c..aff0f32 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
@@ -17,22 +17,21 @@
*/
package org.apache.openejb.jee.jpa.unit;
+import org.apache.openejb.jee.JAXBContextFactory;
+import org.apache.openejb.jee.JaxbJavaee;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLFilterImpl;
-import org.apache.openejb.jee.JAXBContextFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.UnmarshallerHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
-import java.io.InputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URL;
/**
* @version $Revision$ $Date$
@@ -41,7 +40,8 @@ public class JaxbPersistenceFactory {
public static final String PERSISTENCE_SCHEMA = "http://java.sun.com/xml/ns/persistence";
public static <T> T getPersistence(final Class<T> clazz, final InputStream persistenceDescriptor) throws Exception {
- final JAXBContext jc = JAXBContextFactory.newInstance(clazz);
+ final JAXBContext jc = clazz.getClassLoader() == JaxbPersistenceFactory.class.getClassLoader() ?
+ JaxbJavaee.getContext(clazz) : JAXBContextFactory.newInstance(clazz);
final Unmarshaller u = jc.createUnmarshaller();
final UnmarshallerHandler uh = u.getUnmarshallerHandler();
@@ -56,8 +56,7 @@ public class JaxbPersistenceFactory {
// Create a filter to intercept events
final PersistenceFilter xmlFilter = new PersistenceFilter(xmlReader);
- // Be sure the filter has the JAXB content handler set (or it wont
- // work)
+ // Be sure the filter has the JAXB content handler set (or it wont work)
xmlFilter.setContentHandler(uh);
final SAXSource source = new SAXSource(xmlFilter, new InputSource(persistenceDescriptor));
@@ -78,13 +77,17 @@ public class JaxbPersistenceFactory {
}
// Inject the proper namespace
- public static class PersistenceFilter extends XMLFilterImpl {
- private static final InputSource EMPTY_INPUT_SOURCE = new InputSource(new ByteArrayInputStream(new byte[0]));
-
+ public static class PersistenceFilter extends JaxbJavaee.NoSourceFilter {
public PersistenceFilter(final XMLReader xmlReader) {
super(xmlReader);
}
+ @Override
+ protected String eeUri(final String uri) {
+ return "http://xmlns.jcp.org/xml/ns/persistence".equals(uri) ? "http://java.sun.com/xml/ns/persistence": uri;
+ }
+
+ @Override
public InputSource resolveEntity(final String publicId, final String systemId) throws SAXException, IOException {
return EMPTY_INPUT_SOURCE;
}