You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2012/07/26 18:36:42 UTC
svn commit: r1366076 - in
/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl:
JTAEntityManager.java SynchronizedEntityManagerWrapper.java
Author: gnodet
Date: Thu Jul 26 16:36:42 2012
New Revision: 1366076
URL: http://svn.apache.org/viewvc?rev=1366076&view=rev
Log:
[ARIES-885] In container managed mode, a single non thread safe entity manager is used to service all requests when no transaction is active
Added:
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/SynchronizedEntityManagerWrapper.java
Modified:
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java
Modified: aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java?rev=1366076&r1=1366075&r2=1366076&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java (original)
+++ aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java Thu Jul 26 16:36:42 2012
@@ -94,7 +94,7 @@ public class JTAEntityManager implements
synchronized (this) {
if (detachedManager == null) {
- detachedManager = temp;
+ detachedManager = new SynchronizedEntityManagerWrapper(temp);
temp = null;
}
}
Added: aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/SynchronizedEntityManagerWrapper.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/SynchronizedEntityManagerWrapper.java?rev=1366076&view=auto
==============================================================================
--- aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/SynchronizedEntityManagerWrapper.java (added)
+++ aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/SynchronizedEntityManagerWrapper.java Thu Jul 26 16:36:42 2012
@@ -0,0 +1,203 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIESOR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.jpa.container.context.transaction.impl;
+
+import java.util.Map;
+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.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.metamodel.Metamodel;
+
+/**
+ * A synchronized wrapper for the EntityManager
+ */
+public class SynchronizedEntityManagerWrapper implements EntityManager {
+
+ private final EntityManager entityManager;
+
+ public SynchronizedEntityManagerWrapper(EntityManager entityManager) {
+ this.entityManager = entityManager;
+ }
+
+ public synchronized void persist(Object entity) {
+ entityManager.persist(entity);
+ }
+
+ public synchronized <T> T merge(T entity) {
+ return entityManager.merge(entity);
+ }
+
+ public synchronized void remove(Object entity) {
+ entityManager.remove(entity);
+ }
+
+ public synchronized <T> T find(Class<T> entityClass, Object primaryKey) {
+ return entityManager.find(entityClass, primaryKey);
+ }
+
+ public synchronized <T> T find(Class<T> entityClass, Object primaryKey, Map<String, Object> properties) {
+ return entityManager.find(entityClass, primaryKey, properties);
+ }
+
+ public synchronized <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode) {
+ return entityManager.find(entityClass, primaryKey, lockMode);
+ }
+
+ public synchronized <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode, Map<String, Object> properties) {
+ return entityManager.find(entityClass, primaryKey, lockMode, properties);
+ }
+
+ public synchronized <T> T getReference(Class<T> entityClass, Object primaryKey) {
+ return entityManager.getReference(entityClass, primaryKey);
+ }
+
+ public synchronized void flush() {
+ entityManager.flush();
+ }
+
+ public synchronized void setFlushMode(FlushModeType flushMode) {
+ entityManager.setFlushMode(flushMode);
+ }
+
+ public synchronized FlushModeType getFlushMode() {
+ return entityManager.getFlushMode();
+ }
+
+ public synchronized void lock(Object entity, LockModeType lockMode) {
+ entityManager.lock(entity, lockMode);
+ }
+
+ public synchronized void lock(Object entity, LockModeType lockMode, Map<String, Object> properties) {
+ entityManager.lock(entity, lockMode, properties);
+ }
+
+ public synchronized void refresh(Object entity) {
+ entityManager.refresh(entity);
+ }
+
+ public synchronized void refresh(Object entity, Map<String, Object> properties) {
+ entityManager.refresh(entity, properties);
+ }
+
+ public synchronized void refresh(Object entity, LockModeType lockMode) {
+ entityManager.refresh(entity, lockMode);
+ }
+
+ public synchronized void refresh(Object entity, LockModeType lockMode, Map<String, Object> properties) {
+ entityManager.refresh(entity, lockMode, properties);
+ }
+
+ public synchronized void clear() {
+ entityManager.clear();
+ }
+
+ public synchronized void detach(Object entity) {
+ entityManager.detach(entity);
+ }
+
+ public synchronized boolean contains(Object entity) {
+ return entityManager.contains(entity);
+ }
+
+ public synchronized LockModeType getLockMode(Object entity) {
+ return entityManager.getLockMode(entity);
+ }
+
+ public synchronized void setProperty(String propertyName, Object value) {
+ entityManager.setProperty(propertyName, value);
+ }
+
+ public synchronized Map<String, Object> getProperties() {
+ return entityManager.getProperties();
+ }
+
+ public synchronized Query createQuery(String qlString) {
+ return entityManager.createQuery(qlString);
+ }
+
+ public synchronized <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
+ return entityManager.createQuery(criteriaQuery);
+ }
+
+ public synchronized <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass) {
+ return entityManager.createQuery(qlString, resultClass);
+ }
+
+ public synchronized Query createNamedQuery(String name) {
+ return entityManager.createNamedQuery(name);
+ }
+
+ public synchronized <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass) {
+ return entityManager.createNamedQuery(name, resultClass);
+ }
+
+ public synchronized Query createNativeQuery(String sqlString) {
+ return entityManager.createNativeQuery(sqlString);
+ }
+
+ public synchronized Query createNativeQuery(String sqlString, Class resultClass) {
+ return entityManager.createNativeQuery(sqlString, resultClass);
+ }
+
+ public synchronized Query createNativeQuery(String sqlString, String resultSetMapping) {
+ return entityManager.createNativeQuery(sqlString, resultSetMapping);
+ }
+
+ public synchronized void joinTransaction() {
+ entityManager.joinTransaction();
+ }
+
+ public synchronized <T> T unwrap(Class<T> cls) {
+ return entityManager.unwrap(cls);
+ }
+
+ public synchronized Object getDelegate() {
+ return entityManager.getDelegate();
+ }
+
+ public synchronized void close() {
+ entityManager.close();
+ }
+
+ public synchronized boolean isOpen() {
+ return entityManager.isOpen();
+ }
+
+ public synchronized EntityTransaction getTransaction() {
+ return entityManager.getTransaction();
+ }
+
+ public synchronized EntityManagerFactory getEntityManagerFactory() {
+ return entityManager.getEntityManagerFactory();
+ }
+
+ public synchronized CriteriaBuilder getCriteriaBuilder() {
+ return entityManager.getCriteriaBuilder();
+ }
+
+ public synchronized Metamodel getMetamodel() {
+ return entityManager.getMetamodel();
+ }
+}