You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/01/28 13:30:49 UTC

svn commit: r904063 - in /incubator/aries/trunk/jpa: jpa-container-context/ jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/ jpa-container/ jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ ...

Author: mahrwald
Date: Thu Jan 28 12:30:48 2010
New Revision: 904063

URL: http://svn.apache.org/viewvc?rev=904063&view=rev
Log:
ARIES-131 Add persistence.xml and EntityManager proxying for JPA2

Added:
    incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/
    incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/
    incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/persistence.xml
Modified:
    incubator/aries/trunk/jpa/jpa-container-context/pom.xml
    incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java
    incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAPersistenceContextRegistry.java
    incubator/aries/trunk/jpa/jpa-container/pom.xml
    incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ParsedPersistenceUnit.java
    incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/JPAHandler.java
    incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/PersistenceUnitImpl.java
    incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/SchemaLocatingHandler.java
    incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java
    incubator/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/parsing/PersistenceXMLParsingTest.java

Modified: incubator/aries/trunk/jpa/jpa-container-context/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-context/pom.xml?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container-context/pom.xml (original)
+++ incubator/aries/trunk/jpa/jpa-container-context/pom.xml Thu Jan 28 12:30:48 2010
@@ -113,9 +113,9 @@
                     <instructions>
                         <Bundle-SymbolicName>${pom.groupId}.container.context</Bundle-SymbolicName>
                         <Import-Package>
-                           javax.persistence;version="[1.0.0,1.2.0)",
-                           javax.persistence.criteria;version="[1.1.0,1.2.0)";resolution:=optional,
-                           javax.persistence.metamodel;version="[1.1.0,1.2.0)";resolution:=optional,
+                           javax.persistence;version="[1.0.0,2.1.0)",
+                           javax.persistence.criteria;version="[1.1.0,2.1.0)";resolution:=optional,
+                           javax.persistence.metamodel;version="[1.1.0,2.1.0)";resolution:=optional,
                            *
                         </Import-Package>
                         <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>

Modified: incubator/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/incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java (original)
+++ incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManager.java Thu Jan 28 12:30:48 2010
@@ -49,7 +49,7 @@
 
   public void clear()
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
+    EntityManager em = reg.getCurrentOrNoPersistenceContext(emf, props);
     if(em != null)
       em.clear();
   }
@@ -62,7 +62,7 @@
 
   public boolean contains(Object arg0)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
+    EntityManager em = reg.getCurrentOrNoPersistenceContext(emf, props);
     if(em != null)
      return em.contains(arg0);
     else
@@ -71,57 +71,33 @@
 
   public Query createNamedQuery(String arg0)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.createNamedQuery(arg0);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createNamedQuery(arg0);
   }
 
   public Query createNativeQuery(String arg0)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.createNativeQuery(arg0);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createNativeQuery(arg0);
   }
 
   @SuppressWarnings("unchecked")
   public Query createNativeQuery(String arg0, Class arg1)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.createNativeQuery(arg0, arg1);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createNativeQuery(arg0, arg1);
   }
 
   public Query createNativeQuery(String arg0, String arg1)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.createNativeQuery(arg0, arg1);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createNativeQuery(arg0, arg1);
   }
 
   public Query createQuery(String arg0)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.createQuery(arg0);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createQuery(arg0);
   }
 
   public <T> T find(Class<T> arg0, Object arg1)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.find(arg0, arg1);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).find(arg0, arg1);
   }
 
   public void flush()
@@ -131,29 +107,17 @@
 
   public Object getDelegate()
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.getDelegate();
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getDelegate();
   }
 
   public FlushModeType getFlushMode()
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.getFlushMode();
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getFlushMode();
   }
 
   public <T> T getReference(Class<T> arg0, Object arg1)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    return em.getReference(arg0, arg1);
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getReference(arg0, arg1);
   }
 
   public EntityTransaction getTransaction()
@@ -199,118 +163,104 @@
 
   public void setFlushMode(FlushModeType arg0)
   {
-    EntityManager em = reg.getCurrentPersistenceContext(emf, props);
-    if(em == null)
-      em = emf.createEntityManager(props);
-    
-    em.setFlushMode(arg0);
+    reg.getCurrentOrDetachedPersistenceContext(emf, props).setFlushMode(arg0);
   }
 
   public <T> TypedQuery<T> createNamedQuery(String arg0, Class<T> arg1)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createNamedQuery(arg0, arg1);
   }
 
   public <T> TypedQuery<T> createQuery(CriteriaQuery<T> arg0)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createQuery(arg0);
   }
 
   public <T> TypedQuery<T> createQuery(String arg0, Class<T> arg1)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).createQuery(arg0, arg1);
   }
 
   public void detach(Object arg0)
   {
-    // TODO Auto-generated method stub
-    
+    reg.getCurrentOrDetachedPersistenceContext(emf, props).detach(arg0);
   }
 
   public <T> T find(Class<T> arg0, Object arg1, Map<String, Object> arg2)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).find(arg0, arg1, arg2);
   }
 
   public <T> T find(Class<T> arg0, Object arg1, LockModeType arg2)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).find(arg0, arg1, arg2);
   }
 
   public <T> T find(Class<T> arg0, Object arg1, LockModeType arg2, Map<String, Object> arg3)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).find(arg0, arg1, arg2, arg3);
   }
 
   public CriteriaBuilder getCriteriaBuilder()
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getCriteriaBuilder();
   }
 
   public EntityManagerFactory getEntityManagerFactory()
   {
-    // TODO Auto-generated method stub
-    return null;
+    return emf;
   }
 
   public LockModeType getLockMode(Object arg0)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentPersistenceContext(emf, props).getLockMode(arg0);
   }
 
   public Metamodel getMetamodel()
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getMetamodel();
   }
 
   public Map<String, Object> getProperties()
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).getProperties();
   }
 
   public void lock(Object arg0, LockModeType arg1, Map<String, Object> arg2)
   {
-    // TODO Auto-generated method stub
-    
+    reg.getCurrentPersistenceContext(emf, props).lock(arg0, arg1, arg2);
   }
 
   public void refresh(Object arg0, Map<String, Object> arg1)
   {
-    // TODO Auto-generated method stub
-    
+    reg.getCurrentPersistenceContext(emf, props).refresh(arg0, arg1);
   }
 
   public void refresh(Object arg0, LockModeType arg1)
   {
-    // TODO Auto-generated method stub
-    
+    reg.getCurrentPersistenceContext(emf, props).refresh(arg0, arg1);
   }
 
   public void refresh(Object arg0, LockModeType arg1, Map<String, Object> arg2)
   {
-    // TODO Auto-generated method stub
-    
+    reg.getCurrentPersistenceContext(emf, props).refresh(arg0, arg1, arg2);
   }
 
   public void setProperty(String arg0, Object arg1)
-  {
-    // TODO Auto-generated method stub
-    
+  {    
+    /*
+     * TODO: check this
+     * We don't update props because the changed property should only be visible to the 
+     * EntityManager of the current transaction !?
+     */
+    EntityManager em = reg.getCurrentOrNoPersistenceContext(emf, props);
+    if (em != null) {
+      em.setProperty(arg0, arg1);
+    }
   }
 
   public <T> T unwrap(Class<T> arg0)
   {
-    // TODO Auto-generated method stub
-    return null;
+    return reg.getCurrentOrDetachedPersistenceContext(emf, props).unwrap(arg0);
   }
 }

Modified: incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAPersistenceContextRegistry.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAPersistenceContextRegistry.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAPersistenceContextRegistry.java (original)
+++ incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAPersistenceContextRegistry.java Thu Jan 28 12:30:48 2010
@@ -53,7 +53,8 @@
    * automatically be closed when the transaction completes.
    * 
    * @param persistenceUnit The peristence unit to create the persitence context from
-   * @param properties  Any properties that should be passed on the call to {@code createEntityManager()}
+   * @param properties  Any properties that should be passed on the call to {@code createEntityManager()}. 
+   * The properties are NOT used for retrieving an already created persistence context.
    * 
    * @return A persistence context associated with the current transaction. Note that this will
    *         need to be wrappered to obey the JPA spec by throwing the correct exceptions
@@ -92,7 +93,45 @@
     
     return toReturn;
   }
+  
+  /**
+   * Get the persistence context for the current transaction if a transaction is active. 
+   * {@link getCurrentPersistenceContext}
+   * 
+   * Otherwise return a freshly created persistence context that is not associated with any
+   * transaction.
+   * 
+   * @param persistenceUnit
+   * @param properties
+   * @return An {@link EntityManager} object
+   */
+  public EntityManager getCurrentOrDetachedPersistenceContext(EntityManagerFactory persistenceUnit, Map<?,?> properties) 
+  {
+    if (tranRegistry.getTransactionKey() != null)
+      return getCurrentPersistenceContext(persistenceUnit, properties);
+    else 
+      return persistenceUnit.createEntityManager(properties);
+  }
+
+  /**
+   * Get the persistence context for the current transaction if a transaction is active. 
+   * {@link getCurrentPersistenceContext}
+   * 
+   * Otherwise return null;
+   * 
+   * @param persistenceUnit
+   * @param properties
+   * @return The {@link EntityManager} object or null if there is no active transaction.
+   */
+  public EntityManager getCurrentOrNoPersistenceContext(EntityManagerFactory persistenceUnit, Map<?,?> properties) 
+  {
+    if (tranRegistry.getTransactionKey() != null)
+      return getCurrentPersistenceContext(persistenceUnit, properties);
+    else 
+      return null;
+  }
 
+  
   /**
    * Provide a {@link TransactionSynchronizationRegistry} to use
    * @param tranRegistry

Modified: incubator/aries/trunk/jpa/jpa-container/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/pom.xml?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/pom.xml (original)
+++ incubator/aries/trunk/jpa/jpa-container/pom.xml Thu Jan 28 12:30:48 2010
@@ -104,6 +104,8 @@
                         <Import-Package>
                             javax.persistence;version="[1.0.0,2.1.0)",
                             javax.persistence.spi;version="[1.0.0,2.1.0)",
+                            javax.persistence.criteria;version="[1.1.0,2.1.0)";resolution:=optional,
+                            javax.persistence.metamodel;version="[1.1.0,2.1.0)";resolution:=optional,
                             *
                         </Import-Package>
                         <Export-Package>

Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ParsedPersistenceUnit.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ParsedPersistenceUnit.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ParsedPersistenceUnit.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/ParsedPersistenceUnit.java Thu Jan 28 12:30:48 2010
@@ -62,6 +62,14 @@
   /** A {@link Boolean} indicating whether unlisted classes should be excluded */
   public static final String EXCLUDE_UNLISTED_CLASSES = "org.apache.aries.jpa.exclude.unlisted";
   
+  /* JPA 2 extensions */
+  
+  /** The caching type of the persistence unit. This will only be available for JPA2 persistence units. */
+  public static final String SHARED_CACHE_MODE = "org.apache.aries.jpa2.shared.cache.mode";
+  /** The validation mode of the persistence unit. This will only be available for JPA2 persistence units. */
+  public static final String VALIDATION_MODE = "org.apache.aries.jpa2.validation.mode";
+  
+  
   /* End of Map keys */
   
   /** This property is used in the JPA properties to indicate a provider version range */

Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/JPAHandler.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/JPAHandler.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/JPAHandler.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/JPAHandler.java Thu Jan 28 12:30:48 2010
@@ -106,6 +106,10 @@
       pu.addClassName(s);
     else if("exclude-unlisted-classes".equals(elementName))
       pu.setExcludeUnlisted(Boolean.parseBoolean(s));
+    else if ("2.0".equals(jpaVersion) && "shared-cache-mode".equals(elementName))
+      pu.setSharedCacheMode(s);
+    else if ("2.0".equals(jpaVersion) && "validation-mode".equals(elementName))
+      pu.setValidationMode(s);
   }
 
   @Override

Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/PersistenceUnitImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/PersistenceUnitImpl.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/PersistenceUnitImpl.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/PersistenceUnitImpl.java Thu Jan 28 12:30:48 2010
@@ -184,6 +184,22 @@
     provider = providerRef;
   }
   
+  /**
+   * @param sharedCacheMode
+   */
+  public void setSharedCacheMode(String sharedCacheMode)
+  {
+    metadata.put(SHARED_CACHE_MODE, sharedCacheMode);
+  }
+  
+  /**
+   * @param validationMode
+   */
+  public void setValidationMode(String validationMode)
+  {
+    metadata.put(VALIDATION_MODE, validationMode);
+  }
+  
   public String toString()
   {
     return "Persistence unit " + metadata.get(UNIT_NAME) + " in bundle "

Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/SchemaLocatingHandler.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/SchemaLocatingHandler.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/SchemaLocatingHandler.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parsing/impl/SchemaLocatingHandler.java Thu Jan 28 12:30:48 2010
@@ -88,11 +88,19 @@
     if("1.0".equals(type)) {
       try{
         schemaURL = new URL("http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd");
-      }catch(Exception e){
+      }catch(Exception e) {
     	//will not occur with fixed url above.
       }
+    } else if ("2.0".equals(type)) {
+      try {
+        //TODO use proper schema location
+        schemaURL = new URL("http://svn.apache.org/repos/asf/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/persistence_2_0-xsd.rsrc");
+      } catch (Exception e) {
+        //will not occur with fixed url above
+      }
     }
-    //TODO handle JPA 2.0
+
+    
     if(schemaURL != null){
       schema = schemaFactory.newSchema(schemaURL);
     }

Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java Thu Jan 28 12:30:48 2010
@@ -163,8 +163,12 @@
   }
 
   public SharedCacheMode getSharedCacheMode() {
-    // TODO This needs to be supported once we parse JPA 2.0 xml
-    return SharedCacheMode.UNSPECIFIED;
+    String s = (String) unit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.SHARED_CACHE_MODE);
+    
+    if (s == null)
+      return SharedCacheMode.UNSPECIFIED;
+    else
+      return SharedCacheMode.valueOf(s);
   }
 
   public PersistenceUnitTransactionType getTransactionType() {
@@ -178,8 +182,13 @@
   }
 
   public ValidationMode getValidationMode() {
-    // TODO This needs to be supported once we parse JPA 2.0 xml
-    return ValidationMode.AUTO;
+    String s = (String) unit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.VALIDATION_MODE);
+    
+    if (s == null)
+      return ValidationMode.AUTO;
+    else
+      return ValidationMode.valueOf(s);
+
   }
   
 }
\ No newline at end of file

Modified: incubator/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/parsing/PersistenceXMLParsingTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/parsing/PersistenceXMLParsingTest.java?rev=904063&r1=904062&r2=904063&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/parsing/PersistenceXMLParsingTest.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/parsing/PersistenceXMLParsingTest.java Thu Jan 28 12:30:48 2010
@@ -235,6 +235,36 @@
         is.close();
     }
   }
+  
+  @Test
+  public void testJPA2() throws Exception
+  {
+    InputStream is = null;
+    try {
+      String location = "file22/META-INF/persistence.xml";
+      is = getClass().getClassLoader().getResourceAsStream(location);
+      PersistenceDescriptor descriptor = new PersistenceDescriptorImpl(location, is);
+      
+      Bundle b = Skeleton.newMock(Bundle.class);
+      List<ParsedPersistenceUnit> parsedUnits = getList(PersistenceDescriptorParser.parse(b, descriptor));
+      
+      assertEquals(2, parsedUnits.size());
+      
+      ParsedPersistenceUnit customUnit = parsedUnits.get(0);
+      assertEquals("ENABLE_SELECTIVE", customUnit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.SHARED_CACHE_MODE));
+      assertEquals("CALLBACK", customUnit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.VALIDATION_MODE));
+
+      
+      ParsedPersistenceUnit defaultUnit = parsedUnits.get(1);
+      assertNull(defaultUnit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.SHARED_CACHE_MODE));
+      assertNull(defaultUnit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.VALIDATION_MODE));
+        
+        
+    } finally {
+      if (is != null)
+        is.close();
+    }
+  }
 
   /**
    * Sort a Collection of ParsedPersistenceUnit into alphabetical order (by unit name)

Added: incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/persistence.xml?rev=904063&view=auto
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/persistence.xml (added)
+++ incubator/aries/trunk/jpa/jpa-container/src/test/resources/file22/META-INF/persistence.xml Thu Jan 28 12:30:48 2010
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
+  <persistence-unit name="default" />
+
+  <persistence-unit name="custom" transaction-type="JTA">
+    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
+    <validation-mode>CALLBACK</validation-mode>
+  </persistence-unit>
+</persistence>
\ No newline at end of file