Return-Path: X-Original-To: apmail-tapestry-dev-archive@www.apache.org Delivered-To: apmail-tapestry-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BFB5F188D7 for ; Tue, 15 Mar 2016 05:59:21 +0000 (UTC) Received: (qmail 75351 invoked by uid 500); 15 Mar 2016 05:59:21 -0000 Delivered-To: apmail-tapestry-dev-archive@tapestry.apache.org Received: (qmail 75301 invoked by uid 500); 15 Mar 2016 05:59:21 -0000 Mailing-List: contact commits-help@tapestry.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tapestry.apache.org Delivered-To: mailing list commits@tapestry.apache.org Received: (qmail 75292 invoked by uid 99); 15 Mar 2016 05:59:21 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 15 Mar 2016 05:59:21 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2EA15DFB86; Tue, 15 Mar 2016 05:59:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: kaosko@apache.org To: commits@tapestry.apache.org Message-Id: <9e03c64eb553430fb60e9df142954681@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: tapestry-5 git commit: FIXED - TAP5-2027: EntityManagerObjectProvider always provides the initial EntityManger proxy created Date: Tue, 15 Mar 2016 05:59:21 +0000 (UTC) Repository: tapestry-5 Updated Branches: refs/heads/master 940bd2a51 -> 0acf94ae0 FIXED - TAP5-2027: EntityManagerObjectProvider always provides the initial EntityManger proxy created - change the proxy member from a single instance EntityManager to a map - refactor getOrCreateProxy: unsynchronize access to the map and only make modifying the map synchronized - candidate for merging to T5.3, issue was originally opened against that version Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/0acf94ae Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/0acf94ae Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/0acf94ae Branch: refs/heads/master Commit: 0acf94ae073b321ec8579092c0324745ff235c05 Parents: 940bd2a Author: kaosko Authored: Mon Mar 14 22:59:21 2016 -0700 Committer: kaosko Committed: Mon Mar 14 22:59:21 2016 -0700 ---------------------------------------------------------------------- .../jpa/EntityManagerObjectProvider.java | 52 +++++++++++--------- 1 file changed, 29 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0acf94ae/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java index bb2f9ae..ae91fea 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java @@ -14,6 +14,12 @@ package org.apache.tapestry5.internal.jpa; +import java.util.HashMap; +import java.util.Map; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + import org.apache.tapestry5.ioc.AnnotationProvider; import org.apache.tapestry5.ioc.ObjectCreator; import org.apache.tapestry5.ioc.ObjectLocator; @@ -21,13 +27,9 @@ import org.apache.tapestry5.ioc.ObjectProvider; import org.apache.tapestry5.ioc.services.PlasticProxyFactory; import org.apache.tapestry5.jpa.EntityManagerManager; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - public class EntityManagerObjectProvider implements ObjectProvider { - - private EntityManager proxy; + private Map emProxyByName = new HashMap(); @Override public T provide(final Class objectType, final AnnotationProvider annotationProvider, @@ -39,29 +41,33 @@ public class EntityManagerObjectProvider implements ObjectProvider return null; } - private synchronized EntityManager getOrCreateProxy( - final AnnotationProvider annotationProvider, final ObjectLocator objectLocator) + @SuppressWarnings( + { "unchecked", "rawtypes" }) + private EntityManager getOrCreateProxy(final AnnotationProvider annotationProvider, + final ObjectLocator objectLocator) { + final PersistenceContext annotation = annotationProvider + .getAnnotation(PersistenceContext.class); + EntityManager proxy = emProxyByName.get(annotation.unitName()); if (proxy == null) - { - final PlasticProxyFactory proxyFactory = objectLocator.getService("PlasticProxyFactory", - PlasticProxyFactory.class); - - final PersistenceContext annotation = annotationProvider - .getAnnotation(PersistenceContext.class); - - proxy = proxyFactory.createProxy(EntityManager.class, new ObjectCreator() + synchronized (this) { - @Override - public Object createObject() + final PlasticProxyFactory proxyFactory = objectLocator.getService( + "PlasticProxyFactory", PlasticProxyFactory.class); + + proxy = proxyFactory.createProxy(EntityManager.class, new ObjectCreator() { - final EntityManagerManager entityManagerManager = objectLocator - .getService(EntityManagerManager.class); + @Override + public Object createObject() + { + final EntityManagerManager entityManagerManager = objectLocator + .getService(EntityManagerManager.class); - return JpaInternalUtils.getEntityManager(entityManagerManager, annotation); - } - }, ""); - } + return JpaInternalUtils.getEntityManager(entityManagerManager, annotation); + } + }, ""); + emProxyByName.put(annotation.unitName(), proxy); + } return proxy; }