You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2010/10/16 01:16:29 UTC
svn commit: r1023145 - in /openejb/trunk/openejb3: ./
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
container/openejb-core/src/main/java/org/apache/openejb/config/
container/openejb-core/src/main/java/org/apache/openejb/jun...
Author: dblevins
Date: Fri Oct 15 23:16:29 2010
New Revision: 1023145
URL: http://svn.apache.org/viewvc?rev=1023145&view=rev
Log:
merging:
OPENEJB-1353: Be more tolerant of truly empty application-client.xml and ejb-jar.xml -- zero length files
OPENEJB-1365: New log4j.category.OpenEJB.persistence log category
Also, ensure persistence unit name is always present for every refereces (set it when the unit is resolved)
Time all JTA EntityManager operations
Log debug messages for EntityManager operations that don't do anything
Modified:
openejb/trunk/openejb3/ (props changed)
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
Propchange: openejb/trunk/openejb3/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Oct 15 23:16:29 2010
@@ -1,3 +1,3 @@
/openejb/branches/openejb-3.1.1:779593
-/openejb/branches/openejb-3.1.x:945409,945448
+/openejb/branches/openejb-3.1.x:945409,945448,1004381
/openejb/branches/openejb-jcdi:984659-985270
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1023145&r1=1023144&r2=1023145&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Fri Oct 15 23:16:29 2010
@@ -882,7 +882,8 @@ public class Assembler extends Assembler
destroyApplication(appInfo);
}
- private void destroyApplication(AppInfo appInfo) throws UndeployException {
+ public void destroyApplication(AppInfo appInfo) throws UndeployException {
+ deployedApplications.remove(appInfo.path);
logger.info("destroyApplication.start", appInfo.path);
fireBeforeApplicationDestroyed(appInfo);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1023145&r1=1023144&r2=1023145&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Fri Oct 15 23:16:29 2010
@@ -236,6 +236,7 @@ public class AutoConfig implements Dynam
}
if (unit != null){
+ ref.setPersistenceUnitName(unit.getName());
ref.setMappedName(unit.getId());
} else {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java?rev=1023145&r1=1023144&r2=1023145&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java Fri Oct 15 23:16:29 2010
@@ -378,32 +378,14 @@ public class ReadDescriptors implements
}
private static boolean isEmptyEjbJar(URL url) throws IOException, ParserConfigurationException, SAXException {
- final LengthInputStream in = new LengthInputStream(url.openStream());
- InputSource inputSource = new InputSource(in);
-
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setNamespaceAware(true);
- factory.setValidating(false);
- SAXParser parser = factory.newSAXParser();
-
- try {
- parser.parse(inputSource, new DefaultHandler(){
- public void startElement(String uri, String localName, String qName, Attributes att) throws SAXException {
- if (!localName.equals("ejb-jar")) throw new SAXException(localName);
- }
-
- public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException {
- return new InputSource(new ByteArrayInputStream(new byte[0]));
- }
- });
- return true;
- } catch (SAXException e) {
- return in.getLength() == 0;
- }
+ return isEmpty(url, "ejb-jar");
}
private static boolean isEmptyBeansXml(URL url) throws IOException, ParserConfigurationException, SAXException {
+ return isEmpty(url, "beans");
+ }
+ private static boolean isEmpty(URL url, final String rootElement) throws IOException, ParserConfigurationException, SAXException {
final LengthInputStream in = new LengthInputStream(url.openStream());
InputSource inputSource = new InputSource(in);
@@ -415,7 +397,7 @@ public class ReadDescriptors implements
try {
parser.parse(inputSource, new DefaultHandler(){
public void startElement(String uri, String localName, String qName, Attributes att) throws SAXException {
- if (!localName.equals("beans")) throw new SAXException(localName);
+ if (!localName.equals(rootElement)) throw new SAXException(localName);
}
public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1023145&r1=1023144&r2=1023145&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java Fri Oct 15 23:16:29 2010
@@ -34,7 +34,9 @@ import org.apache.openejb.jee.Connector;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.EnterpriseBean;
import org.apache.openejb.jee.ManagedBean;
+import org.apache.openejb.jee.TransactionType;
import org.apache.openejb.jee.jpa.unit.Persistence;
+import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
import org.apache.openejb.jee.oejb3.EjbDeployment;
import org.apache.openejb.jee.oejb3.OpenejbJar;
import org.apache.openejb.loader.SystemInstance;
@@ -85,7 +87,7 @@ public class ApplicationComposer extends
int appModules = 0;
int modules = 0;
- Class[] moduleTypes = {EjbJar.class, EnterpriseBean.class, Persistence.class, Connector.class, Beans.class, Application.class};
+ Class[] moduleTypes = {EjbJar.class, EnterpriseBean.class, Persistence.class, PersistenceUnit.class, Connector.class, Beans.class, Application.class};
for (FrameworkMethod method : testClass.getAnnotatedMethods(Module.class)) {
modules++;
@@ -158,7 +160,7 @@ public class ApplicationComposer extends
final EjbJar ejbJar = new EjbJar();
final OpenejbJar openejbJar = new OpenejbJar();
final ManagedBean bean = ejbJar.addEnterpriseBean(new ManagedBean(javaClass));
-
+ bean.setTransactionType(TransactionType.BEAN);
final EjbDeployment ejbDeployment = openejbJar.addEjbDeployment(bean);
ejbDeployment.setDeploymentId(javaClass.getName());
@@ -198,6 +200,11 @@ public class ApplicationComposer extends
final Persistence persistence = (Persistence) obj;
appModule.getPersistenceModules().add(new PersistenceModule("", persistence));
+ } else if (obj instanceof PersistenceUnit) {
+
+ final PersistenceUnit unit = (PersistenceUnit) obj;
+ appModule.getPersistenceModules().add(new PersistenceModule("", new Persistence(unit)));
+
} else if (obj instanceof Beans) {
final Beans beans = (Beans) obj;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java?rev=1023145&r1=1023144&r2=1023145&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/persistence/JtaEntityManager.java Fri Oct 15 23:16:29 2010
@@ -21,6 +21,7 @@ import org.apache.openejb.util.Logger;
import org.apache.openejb.util.LogCategory;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
@@ -48,13 +49,14 @@ import javax.persistence.metamodel.Metam
*/
public class JtaEntityManager implements EntityManager {
- private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB.createChild("persistence"), JtaEntityManager.class);
+ private static final Logger baseLogger = Logger.getInstance(LogCategory.OPENEJB.createChild("persistence"), JtaEntityManager.class);
private final JtaEntityManagerRegistry registry;
private final EntityManagerFactory entityManagerFactory;
private final Map properties;
private final boolean extended;
private final String unitName;
+ private final Logger logger;
public JtaEntityManager(JtaEntityManagerRegistry registry, EntityManagerFactory entityManagerFactory, Map properties, String unitName) {
this(unitName, registry, entityManagerFactory, properties, false);
@@ -68,6 +70,7 @@ public class JtaEntityManager implements
this.entityManagerFactory = entityManagerFactory;
this.properties = properties;
this.extended = extended;
+ logger = (unitName == null) ? baseLogger : baseLogger.getChildLogger(unitName);
}
private EntityManager getEntityManager() {
@@ -108,23 +111,43 @@ public class JtaEntityManager implements
public void persist(Object entity) {
assertTransactionActive();
- getEntityManager().persist(entity);
+ final Timer timer = Op.persist.start(this);
+ try {
+ getEntityManager().persist(entity);
+ } finally {
+ timer.stop();
+ }
}
public <T>T merge(T entity) {
assertTransactionActive();
- return getEntityManager().merge(entity);
+ final Timer timer = Op.merge.start(this);
+ try {
+ return getEntityManager().merge(entity);
+ } finally {
+ timer.stop();
+ }
}
public void remove(Object entity) {
assertTransactionActive();
- getEntityManager().remove(entity);
+ final Timer timer = Op.remove.start(this);
+ try {
+ getEntityManager().remove(entity);
+ } finally {
+ timer.stop();
+ }
}
public <T>T find(Class<T> entityClass, Object primaryKey) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.find(entityClass, primaryKey);
+ final Timer timer = Op.find.start(this);
+ try {
+ return entityManager.find(entityClass, primaryKey);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -133,7 +156,12 @@ public class JtaEntityManager implements
public <T>T getReference(Class<T> entityClass, Object primaryKey) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getReference(entityClass, primaryKey);
+ final Timer timer = Op.getReference.start(this);
+ try {
+ return entityManager.getReference(entityClass, primaryKey);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -141,13 +169,23 @@ public class JtaEntityManager implements
public void flush() {
assertTransactionActive();
- getEntityManager().flush();
+ final Timer timer = Op.flush.start(this);
+ try {
+ getEntityManager().flush();
+ } finally {
+ timer.stop();
+ }
}
public void setFlushMode(FlushModeType flushMode) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.setFlushMode(flushMode);
+ final Timer timer = Op.setFlushMode.start(this);
+ try {
+ entityManager.setFlushMode(flushMode);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -156,7 +194,12 @@ public class JtaEntityManager implements
public FlushModeType getFlushMode() {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getFlushMode();
+ final Timer timer = Op.getFlushMode.start(this);
+ try {
+ return entityManager.getFlushMode();
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -164,53 +207,98 @@ public class JtaEntityManager implements
public void lock(Object entity, LockModeType lockMode) {
assertTransactionActive();
- getEntityManager().lock(entity, lockMode);
+ final Timer timer = Op.lock.start(this);
+ try {
+ getEntityManager().lock(entity, lockMode);
+ } finally {
+ timer.stop();
+ }
}
public void refresh(Object entity) {
assertTransactionActive();
- getEntityManager().refresh(entity);
+ final Timer timer = Op.refresh.start(this);
+ try {
+ getEntityManager().refresh(entity);
+ } finally {
+ timer.stop();
+ }
}
public void clear() {
if (!extended && !isTransactionActive()) {
return;
}
- getEntityManager().clear();
+ final Timer timer = Op.clear.start(this);
+ try {
+ getEntityManager().clear();
+ } finally {
+ timer.stop();
+ }
}
public boolean contains(Object entity) {
- return isTransactionActive() && getEntityManager().contains(entity);
+ final Timer timer = Op.contains.start(this);
+ try {
+ return isTransactionActive() && getEntityManager().contains(entity);
+ } finally {
+ timer.stop();
+ }
}
public Query createQuery(String qlString) {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager.createQuery(qlString);
- return proxyIfNoTx(entityManager, query);
+ final Timer timer = Op.createQuery.start(this);
+ try {
+ EntityManager entityManager = getEntityManager();
+ Query query = entityManager.createQuery(qlString);
+ return proxyIfNoTx(entityManager, query);
+ } finally {
+ timer.stop();
+ }
}
public Query createNamedQuery(String name) {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager.createNamedQuery(name);
- return proxyIfNoTx(entityManager, query);
+ final Timer timer = Op.createNamedQuery.start(this);
+ try {
+ EntityManager entityManager = getEntityManager();
+ Query query = entityManager.createNamedQuery(name);
+ return proxyIfNoTx(entityManager, query);
+ } finally {
+ timer.stop();
+ }
}
public Query createNativeQuery(String sqlString) {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager.createNativeQuery(sqlString);
- return proxyIfNoTx(entityManager, query);
+ final Timer timer = Op.createNativeQuery.start(this);
+ try {
+ EntityManager entityManager = getEntityManager();
+ Query query = entityManager.createNativeQuery(sqlString);
+ return proxyIfNoTx(entityManager, query);
+ } finally {
+ timer.stop();
+ }
}
public Query createNativeQuery(String sqlString, Class resultClass) {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager.createNativeQuery(sqlString, resultClass);
- return proxyIfNoTx(entityManager, query);
+ final Timer timer = Op.createNativeQuery.start(this);
+ try {
+ EntityManager entityManager = getEntityManager();
+ Query query = entityManager.createNativeQuery(sqlString, resultClass);
+ return proxyIfNoTx(entityManager, query);
+ } finally {
+ timer.stop();
+ }
}
public Query createNativeQuery(String sqlString, String resultSetMapping) {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager.createNativeQuery(sqlString, resultSetMapping);
- return proxyIfNoTx(entityManager, query);
+ final Timer timer = Op.createNativeQuery.start(this);
+ try {
+ EntityManager entityManager = getEntityManager();
+ Query query = entityManager.createNativeQuery(sqlString, resultSetMapping);
+ return proxyIfNoTx(entityManager, query);
+ } finally {
+ timer.stop();
+ }
}
private Query proxyIfNoTx(EntityManager entityManager, Query query) {
@@ -221,9 +309,15 @@ public class JtaEntityManager implements
}
public void joinTransaction() {
+ if (logger.isDebugEnabled()) {
+ logger.debug("PersistenceUnit(name=" + unitName + ") - entityManager.joinTransaction() call ignored - not applicable to a JTA Managed EntityManager", new Exception().fillInStackTrace());
+ }
}
public void close() {
+ if (logger.isDebugEnabled()) {
+ logger.debug("PersistenceUnit(name=" + unitName + ") - entityManager.close() call ignored - not applicable to a JTA Managed EntityManager", new Exception().fillInStackTrace());
+ }
}
public boolean isOpen() {
@@ -241,7 +335,12 @@ public class JtaEntityManager implements
public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.createNamedQuery(name, resultClass);
+ final Timer timer = Op.createNamedQuery.start(this);
+ try {
+ return entityManager.createNamedQuery(name, resultClass);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -252,7 +351,12 @@ public class JtaEntityManager implements
public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.createQuery(criteriaQuery);
+ final Timer timer = Op.createQuery.start(this);
+ try {
+ return entityManager.createQuery(criteriaQuery);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -263,7 +367,12 @@ public class JtaEntityManager implements
public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.createQuery(qlString, resultClass);
+ final Timer timer = Op.createQuery.start(this);
+ try {
+ return entityManager.createQuery(qlString, resultClass);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -274,7 +383,12 @@ public class JtaEntityManager implements
public void detach(Object entity) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.detach(entity);
+ final Timer timer = Op.detach.start(this);
+ try {
+ entityManager.detach(entity);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -285,7 +399,12 @@ public class JtaEntityManager implements
public <T> T find(Class<T> entityClass, Object primaryKey, Map<String, Object> properties) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.find(entityClass, primaryKey, properties);
+ final Timer timer = Op.find.start(this);
+ try {
+ return entityManager.find(entityClass, primaryKey, properties);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -296,7 +415,12 @@ public class JtaEntityManager implements
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.find(entityClass, entityManager, lockMode);
+ final Timer timer = Op.find.start(this);
+ try {
+ return entityManager.find(entityClass, entityManager, lockMode);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -307,7 +431,12 @@ public class JtaEntityManager implements
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode, Map<String, Object> properties) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.find(entityClass, entityManager, lockMode, properties);
+ final Timer timer = Op.find.start(this);
+ try {
+ return entityManager.find(entityClass, entityManager, lockMode, properties);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -324,7 +453,12 @@ public class JtaEntityManager implements
public LockModeType getLockMode(Object entity) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getLockMode(entity);
+ final Timer timer = Op.getLockMode.start(this);
+ try {
+ return entityManager.getLockMode(entity);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -335,7 +469,12 @@ public class JtaEntityManager implements
public Metamodel getMetamodel() {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getMetamodel();
+ final Timer timer = Op.getMetamodel.start(this);
+ try {
+ return entityManager.getMetamodel();
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -346,7 +485,12 @@ public class JtaEntityManager implements
public Map<String, Object> getProperties() {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getProperties();
+ final Timer timer = Op.getProperties.start(this);
+ try {
+ return entityManager.getProperties();
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -357,7 +501,12 @@ public class JtaEntityManager implements
public CriteriaBuilder getCriteriaBuilder() {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.getCriteriaBuilder();
+ final Timer timer = Op.getCriteriaBuilder.start(this);
+ try {
+ return entityManager.getCriteriaBuilder();
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -368,7 +517,12 @@ public class JtaEntityManager implements
public void lock(Object entity, LockModeType lockMode, Map<String, Object> properties) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.lock(entityManager, lockMode, properties);
+ final Timer timer = Op.lock.start(this);
+ try {
+ entityManager.lock(entityManager, lockMode, properties);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -379,7 +533,12 @@ public class JtaEntityManager implements
public void refresh(Object entity, Map<String, Object> properties) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.refresh(entityManager, properties);
+ final Timer timer = Op.refresh.start(this);
+ try {
+ entityManager.refresh(entityManager, properties);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -390,7 +549,12 @@ public class JtaEntityManager implements
public void refresh(Object entity, LockModeType lockMode) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.refresh(entityManager, lockMode);
+ final Timer timer = Op.refresh.start(this);
+ try {
+ entityManager.refresh(entityManager, lockMode);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -401,7 +565,12 @@ public class JtaEntityManager implements
public void refresh(Object entity, LockModeType lockMode, Map<String, Object> properties) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.refresh(entityManager, lockMode, properties);
+ final Timer timer = Op.refresh.start(this);
+ try {
+ entityManager.refresh(entityManager, lockMode, properties);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -412,7 +581,12 @@ public class JtaEntityManager implements
public void setProperty(String name, Object value) {
EntityManager entityManager = getEntityManager();
try {
- entityManager.setProperty(name, value);
+ final Timer timer = Op.setProperty.start(this);
+ try {
+ entityManager.setProperty(name, value);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
@@ -423,9 +597,41 @@ public class JtaEntityManager implements
public <T> T unwrap(Class<T> cls) {
EntityManager entityManager = getEntityManager();
try {
- return entityManager.unwrap(cls);
+ final Timer timer = Op.unwrap.start(this);
+ try {
+ return entityManager.unwrap(cls);
+ } finally {
+ timer.stop();
+ }
} finally {
closeIfNoTx(entityManager);
}
}
+
+ public static class Timer {
+ private final long start = System.nanoTime();
+ private final Op operation;
+ private final JtaEntityManager em;
+
+ public Timer(Op operation, JtaEntityManager em) {
+ this.operation = operation;
+ this.em = em;
+ }
+
+ public void stop() {
+ if (!em.logger.isDebugEnabled()) return;
+
+ final long time = TimeUnit.MILLISECONDS.convert(System.nanoTime() - start, TimeUnit.NANOSECONDS);
+
+ em.logger.debug("PersistenceUnit(name=" + em.unitName + ") - entityManager." + operation + " - " + time + "ms");
+ }
+ }
+
+ 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;
+
+ public Timer start(JtaEntityManager em) {
+ return new Timer(this, em);
+ }
+ }
}