Author: sergeyb
Date: Mon Apr 14 15:45:43 2014
New Revision: 1587227

URL: http://svn.apache.org/r1587227
Log:
[ARIES-1160] Updating JPA container to correctly deal with Bundle.RESOLVED 
events when creating a factory, patch from Christian Schneider applied

Modified:
    
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/EntityManagerFactoryManager.java

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/EntityManagerFactoryManager.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/EntityManagerFactoryManager.java?rev=1587227&r1=1587226&r2=1587227&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/EntityManagerFactoryManager.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/EntityManagerFactoryManager.java
 Mon Apr 14 15:45:43 2014
@@ -309,32 +309,34 @@ public class EntityManagerFactoryManager
    *  valid and should be destroyed
    */
   private void createEntityManagerFactories() throws 
InvalidPersistenceUnitException {
+    if (emfs == null) {  
+      emfs = new HashMap<String, CountingEntityManagerFactory>();
+    }
     //Only try if we have a provider and EMFs
-    if(provider != null) {
-      if(emfs == null && !quiesce) {
-        try {
-          emfs = new HashMap<String, CountingEntityManagerFactory>();
-        
-          //Get hold of the provider
-          PersistenceProvider providerService = (PersistenceProvider) 
containerContext.getService(provider);
-
-          if(providerService == null) {
-            
_logger.warn(NLS.MESSAGES.getMessage("persistence.provider.gone.awol", 
bundle.getSymbolicName() + '/' + bundle.getVersion()));
-            throw new InvalidPersistenceUnitException();
-          }
+    if(provider == null || !emfs.isEmpty() || quiesce) {
+        return;
+    }
+    try {
+      //Get hold of the provider
+      PersistenceProvider providerService = (PersistenceProvider) 
containerContext.getService(provider);
 
-          for(Entry<String, ? extends ManagedPersistenceUnitInfo> entry : 
-               persistenceUnits.entrySet()){
-            ManagedPersistenceUnitInfo mpui = entry.getValue();
-            emfs.put(entry.getKey(), new CountingEntityManagerFactory(
-                providerService.createContainerEntityManagerFactory(
-                    mpui.getPersistenceUnitInfo(), 
mpui.getContainerProperties()), entry.getKey()));
-          }
-        } finally {
-          //Remember to unget the provider
-          containerContext.ungetService(provider);
+      if(providerService == null) {
+        _logger.warn(NLS.MESSAGES.getMessage("persistence.provider.gone.awol", 
bundle.getSymbolicName() + '/' + bundle.getVersion()));
+        throw new InvalidPersistenceUnitException();
+      }
+
+      for(String unitName : persistenceUnits.keySet()){
+        ManagedPersistenceUnitInfo mpui = persistenceUnits.get(unitName);
+        try {
+          EntityManagerFactory emf = 
providerService.createContainerEntityManagerFactory(mpui.getPersistenceUnitInfo(),
 mpui.getContainerProperties());
+          emfs.put(unitName, new CountingEntityManagerFactory(emf, unitName));
+        } catch (Exception e) {
+          _logger.warn("Error creating EntityManagerFactory", e);
         }
       }
+    } finally {
+      //Remember to unget the provider
+      containerContext.ungetService(provider);
     }
   }
 


Reply via email to