Updated Branches:
  refs/heads/5.3 52e8ad578 -> 1ed180c72
  refs/heads/master cf0f4e3d6 -> 1578ea0d2


FIXED - TAP5-2102: Allow supplying EntityManager properties via
TapestryPersistenceUnitInfo 
- add new EntityManagerProperties to TapestryPersistenceUnitInfo
- if set, use the supplied entityManagerProperties in
EntityManagerSourceImpl.createEntityManagerFactory


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/1ed180c7
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/1ed180c7
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/1ed180c7

Branch: refs/heads/5.3
Commit: 1ed180c72089d98b63cca30aae2dec13c5f9095f
Parents: 52e8ad5
Author: Kalle Korhonen <[email protected]>
Authored: Sat Apr 6 19:49:12 2013 -0700
Committer: Kalle Korhonen <[email protected]>
Committed: Sat Apr 6 19:49:12 2013 -0700

----------------------------------------------------------------------
 .../internal/jpa/EntityManagerSourceImpl.java      |    5 +-
 .../internal/jpa/PersistenceUnitInfoImpl.java      |   12 ++++
 .../tapestry5/jpa/TapestryPersistenceUnitInfo.java |   19 ++++++-
 .../internal/jpa/EntityManagerSourceImplTest.java  |   41 +++++++++++++++
 4 files changed, 74 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1ed180c7/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 e1be6ab..5f56014 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
@@ -190,14 +190,15 @@ public class EntityManagerSourceImpl implements 
EntityManagerSource
         return emf;
     }
 
-    private EntityManagerFactory createEntityManagerFactory(final String 
persistenceUnitName)
+    @SuppressWarnings("unchecked")
+    EntityManagerFactory createEntityManagerFactory(final String 
persistenceUnitName)
     {
 
         for (final TapestryPersistenceUnitInfo info : persistenceUnitInfos)
         {
             if (info.getPersistenceUnitName().equals(persistenceUnitName))
             {
-                final Map<String, String> properties = 
CollectionFactory.newCaseInsensitiveMap();
+                final Map properties = info.getEntityManagerProperties() == 
null ? CollectionFactory.newCaseInsensitiveMap() : 
info.getEntityManagerProperties();
                 properties.put(JpaConstants.PERSISTENCE_UNIT_NAME, 
persistenceUnitName);
 
                 String providerClassName = 
info.getPersistenceProviderClassName();

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1ed180c7/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java
----------------------------------------------------------------------
diff --git 
a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java
 
b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java
index 82c0e4a..463a4dd 100644
--- 
a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java
+++ 
b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java
@@ -29,6 +29,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
@@ -60,6 +61,7 @@ public class PersistenceUnitInfoImpl implements 
TapestryPersistenceUnitInfo
 
     private final Properties properties = new Properties();
 
+               private Map entityManagerProperties;
 
     public PersistenceUnitInfoImpl(String persistenceUnitName)
     {
@@ -364,4 +366,14 @@ public class PersistenceUnitInfoImpl implements 
TapestryPersistenceUnitInfo
 
     }
 
+    public TapestryPersistenceUnitInfo setEntityManagerProperties(Map 
properties) {
+       entityManagerProperties = properties;
+       return this;
+    }
+
+    public Map getEntityManagerProperties() {
+       return entityManagerProperties;
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1ed180c7/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java
----------------------------------------------------------------------
diff --git 
a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java
 
b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java
index 128f78d..4ff5b41 100644
--- 
a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java
+++ 
b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java
@@ -14,11 +14,13 @@
 
 package org.apache.tapestry5.jpa;
 
+import java.net.URL;
+import java.util.Map;
+
 import javax.persistence.SharedCacheMode;
 import javax.persistence.ValidationMode;
 import javax.persistence.spi.PersistenceUnitInfo;
 import javax.persistence.spi.PersistenceUnitTransactionType;
-import java.net.URL;
 
 /**
  * Tapestry's mutable extension of {@link PersistenceUnitInfo} interface used 
for XML-less configuration
@@ -152,4 +154,19 @@ public interface TapestryPersistenceUnitInfo extends 
PersistenceUnitInfo
      *         defines whether to exclude or not
      */
     TapestryPersistenceUnitInfo excludeUnlistedClasses(boolean exclude);
+
+    /**
+     * {@link javax.persistence.spi.PersistenceProvider} allows creating an 
{@alink javax.persistence.EntityManagerFactory}
+     * with a default EntityManager properties map. This operation allows 
contributing default properties for
+     * EntityManager.
+     *
+     * @param properties
+     *         properties to initialize EntityManagerFactory with
+     */
+    TapestryPersistenceUnitInfo setEntityManagerProperties(Map properties);
+
+    /**
+     * @return Returns the supplied EntityManagerFactory properties. Returns 
null if not set
+     */
+    Map getEntityManagerProperties();
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1ed180c7/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java
----------------------------------------------------------------------
diff --git 
a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java
 
b/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java
index 75da36f..9ccbafc 100644
--- 
a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java
+++ 
b/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java
@@ -14,9 +14,16 @@
 
 package org.apache.tapestry5.internal.jpa;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+
 import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.jpa.PersistenceUnitConfigurer;
+import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo;
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -48,4 +55,38 @@ public class EntityManagerSourceImplTest extends 
TapestryTestCase
         assertEquals(exception.getMessage(), "Persistence units 'TestUnit, 
TestUnit2' are configured to include managed classes that have not been 
explicitly listed. This is forbidden when multiple persistence units are used 
in the same application. Please configure persistence units to exclude unlisted 
managed classes (e.g. by removing <exclude-unlisted-classes> element) and 
include them explicitly.");
 
     }
+
+    @Test
+    public void 
createEntityManagerFactory_with_supplied_entitymanagerproperties()
+    {
+        PersistenceUnitConfigurer configurer = new PersistenceUnitConfigurer()
+        {
+            @SuppressWarnings(
+            { "unchecked", "rawtypes" })
+            public void configure(TapestryPersistenceUnitInfo unitInfo)
+            {
+                Map properties = new HashMap();
+                properties.put("MYKEY", "MYVALUE");
+                
unitInfo.transactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL)
+                        .persistenceProviderClassName(
+                                
"org.eclipse.persistence.jpa.PersistenceProvider")
+                        .excludeUnlistedClasses(true)
+                        .addProperty("javax.persistence.jdbc.user", "sa")
+                        .addProperty("javax.persistence.jdbc.driver", 
"org.h2.Driver")
+                        .addProperty("javax.persistence.jdbc.url", 
"jdbc:h2:mem:test")
+                        .setEntityManagerProperties(properties);
+            }
+        };
+
+        Map<String, PersistenceUnitConfigurer> configurerMap = 
CollectionFactory
+                .<String, PersistenceUnitConfigurer> newMap();
+        configurerMap.put("defaultpropertytest", configurer);
+        EntityManagerSourceImpl emSource = new EntityManagerSourceImpl(
+                LoggerFactory.getLogger(EntityManagerSourceImplTest.class), 
new ClasspathResource(
+                        "single-persistence-unit.xml"), null, configurerMap);
+        EntityManager em = 
emSource.createEntityManagerFactory("defaultpropertytest")
+                .createEntityManager();
+        assertEquals(em.getProperties().get("MYKEY"), "MYVALUE");
+    }
+
 }

Reply via email to