Author: cschneider
Date: Mon Nov  3 17:17:18 2014
New Revision: 1636398

URL: http://svn.apache.org/r1636398
Log:
ARIES-1162 Destroy persistence unit on unresolved event

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

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java?rev=1636398&r1=1636397&r2=1636398&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
 Mon Nov  3 17:17:18 2014
@@ -284,11 +284,16 @@ public class PersistenceBundleManager im
     EntityManagerFactoryManager mgr = (EntityManagerFactoryManager) object;
     //If the bundle was updated we need to destroy it and re-initialize
     //the EntityManagerFactoryManager
-    if(event != null && event.getType() == BundleEvent.UPDATED) {
+    //If the bundle becomes unresolved we need to destroy persistenceUnits, 
since they
+    //keep a reference to bundle classloader which has wiring m_isDisposed set 
to true
+    //this occurs when Karaf BundleWatcher is used.
+    if(event != null && (event.getType() == BundleEvent.UPDATED || 
event.getType() == BundleEvent.UNRESOLVED)) {
       mgr.destroy();
       persistenceUnitFactory.destroyPersistenceBundle(ctx, bundle);
-      //Don't add to the managersAwaitingProviders, the setupManager will do it
-      setupManager(bundle, mgr, true);
+      if (event.getType() == BundleEvent.UPDATED) {
+          //Don't add to the managersAwaitingProviders, the setupManager will 
do it
+          setupManager(bundle, mgr, true);
+      }
     } else {
       try {
         boolean reassign;


Reply via email to