You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by ka...@apache.org on 2016/03/14 23:08:16 UTC
tapestry-5 git commit: FIXED - TAP5-2499: Race condition in
EntityManagerSource#getEntityManagerFactory
Repository: tapestry-5
Updated Branches:
refs/heads/master 2869383aa -> 940bd2a51
FIXED - TAP5-2499: Race condition in
EntityManagerSource#getEntityManagerFactory
- if EntityManagerFactory is not found, synchronize on the service
itself, double check the existence of the emf and create and put a new
emf in the map
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/940bd2a5
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/940bd2a5
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/940bd2a5
Branch: refs/heads/master
Commit: 940bd2a51df3a96c14da7d1a861f387820b65efe
Parents: 2869383
Author: kaosko <ka...@apache.org>
Authored: Mon Mar 14 15:08:18 2016 -0700
Committer: kaosko <ka...@apache.org>
Committed: Mon Mar 14 15:08:18 2016 -0700
----------------------------------------------------------------------
.../internal/jpa/EntityManagerSourceImpl.java | 48 ++++++++++++--------
1 file changed, 30 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/940bd2a5/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java
index f7aa979..74f1112 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java
@@ -14,6 +14,20 @@
package org.apache.tapestry5.internal.jpa;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceProviderResolver;
+import javax.persistence.spi.PersistenceProviderResolverHolder;
+import javax.persistence.spi.PersistenceUnitInfo;
+
import org.apache.tapestry5.func.F;
import org.apache.tapestry5.func.Mapper;
import org.apache.tapestry5.func.Predicate;
@@ -24,22 +38,13 @@ import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
-import org.apache.tapestry5.jpa.*;
+import org.apache.tapestry5.jpa.EntityManagerSource;
+import org.apache.tapestry5.jpa.JpaConstants;
+import org.apache.tapestry5.jpa.JpaSymbols;
+import org.apache.tapestry5.jpa.PersistenceUnitConfigurer;
+import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo;
import org.slf4j.Logger;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceProviderResolver;
-import javax.persistence.spi.PersistenceProviderResolverHolder;
-import javax.persistence.spi.PersistenceUnitInfo;
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
public class EntityManagerSourceImpl implements EntityManagerSource
{
private final Map<String, EntityManagerFactory> entityManagerFactories = CollectionFactory
@@ -185,11 +190,18 @@ public class EntityManagerSourceImpl implements EntityManagerSource
EntityManagerFactory emf = entityManagerFactories.get(persistenceUnitName);
if (emf == null)
- {
- emf = createEntityManagerFactory(persistenceUnitName);
+ synchronized (this)
+ {
+ emf = entityManagerFactories.get(persistenceUnitName);
- entityManagerFactories.put(persistenceUnitName, emf);
- }
+ if (emf == null)
+ {
+
+ emf = createEntityManagerFactory(persistenceUnitName);
+
+ entityManagerFactories.put(persistenceUnitName, emf);
+ }
+ }
return emf;
}