You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2008/10/15 20:05:20 UTC

svn commit: r704976 - in /felix/trunk/framework/src/main/java/org/apache/felix: framework/BundleInfo.java framework/Felix.java framework/searchpolicy/R4SearchPolicyCore.java moduleloader/IModule.java moduleloader/ModuleImpl.java

Author: rickhall
Date: Wed Oct 15 11:05:20 2008
New Revision: 704976

URL: http://svn.apache.org/viewvc?rev=704976&view=rev
Log:
Modified the resolver to longer consider uninstalled fragments and hosts
when resolving dependencies; this required a new "stale" flag on modules
that gets set when their associated bundle is uninstalled. (FELIX-776)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleInfo.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
    felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/IModule.java
    felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleInfo.java?rev=704976&r1=704975&r2=704976&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleInfo.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleInfo.java Wed Oct 15 11:05:20 2008
@@ -134,6 +134,19 @@
         m_modules = dest;
     }
 
+    /**
+     * This marks all modules as stale when the associated bundle has
+     * been uninstalled. This is necessary since uninstalled bundles
+     * should not be used for fragments or fragment hosts.
+    **/
+    public synchronized void markModulesStale()
+    {
+        for (int i = 0; i < m_modules.length; i++)
+        {
+            ((ModuleImpl) m_modules[i]).setStale();
+        }
+    }
+
     public abstract String getSymbolicName();
 
     public abstract long getBundleId();
@@ -394,4 +407,4 @@
 
         return pd;
     }
-}
\ No newline at end of file
+}

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=704976&r1=704975&r2=704976&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java Wed Oct 15 11:05:20 2008
@@ -2134,10 +2134,11 @@
         if (target != null)
         {
             // Set the bundle's persistent state to uninstalled.
-            target.getInfo().setPersistentStateUninstalled();
+            info.setPersistentStateUninstalled();
 
             // Mark the bundle as removal pending.
-            target.getInfo().setRemovalPending(true);
+            info.setRemovalPending(true);
+            info.markModulesStale();
 
             // Put bundle in uninstalled bundle array.
             rememberUninstalledBundle(bundle);
@@ -4347,4 +4348,4 @@
             m_bundleLock.notifyAll();
         }
     }
-}
\ No newline at end of file
+}

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java?rev=704976&r1=704975&r2=704976&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java Wed Oct 15 11:05:20 2008
@@ -1192,7 +1192,8 @@
                 for (int capIdx = 0; (caps != null) && (capIdx < caps.length); capIdx++)
                 {
                     if (caps[capIdx].getNamespace().equals(ICapability.HOST_NAMESPACE)
-                        && hostReq.isSatisfied(caps[capIdx]))
+                        && hostReq.isSatisfied(caps[capIdx])
+                        && !modules[modIdx].isStale())
                     {
                         hostList.add(modules[modIdx]);
                         break;
@@ -1235,7 +1236,8 @@
                 for (int reqIdx = 0; (reqs != null) && (reqIdx < reqs.length); reqIdx++)
                 {
                     if (reqs[reqIdx].getNamespace().equals(ICapability.HOST_NAMESPACE)
-                        && reqs[reqIdx].isSatisfied(bundleCap))
+                        && reqs[reqIdx].isSatisfied(bundleCap)
+                        && !modules[modIdx].isStale())
                     {
                         indexFragment(fragmentMap, modules[modIdx]);
                         break;

Modified: felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/IModule.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/IModule.java?rev=704976&r1=704975&r2=704976&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/IModule.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/IModule.java Wed Oct 15 11:05:20 2008
@@ -31,4 +31,14 @@
     public Class getClass(String name) throws ClassNotFoundException;
     public URL getResource(String name);
     public Enumeration getResources(String name);
-}
\ No newline at end of file
+
+
+    /**
+     * Returns whether the module is associated with an uninstalled bundle.
+     * If so, then it should not be used when resolving fragments or fragment
+     * hosts. However, it still can be used for resolving imported packages.
+     * @return <tt>true</tt> if the module's bundle is uninstalled, otherwise
+     *         <tt>false</tt>.
+    **/
+    public boolean isStale();
+}

Modified: felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java?rev=704976&r1=704975&r2=704976&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java Wed Oct 15 11:05:20 2008
@@ -36,6 +36,7 @@
     private IModule[] m_dependentHosts = new IModule[0];
     private IModule[] m_dependentImporters = new IModule[0];
     private IModule[] m_dependentRequirers = new IModule[0];
+    private volatile boolean m_isStale = false;
 
     ModuleImpl(Logger logger, String id, IModuleDefinition md)
     {
@@ -251,6 +252,16 @@
         return null;
     }
 
+    public boolean isStale()
+    {
+        return m_isStale;
+    }
+
+    public void setStale()
+    {
+        m_isStale = true;
+    }
+
     public String toString()
     {
         return m_id;
@@ -302,4 +313,4 @@
 
         return tmp;
     }
-}
\ No newline at end of file
+}