[jboss-cvs] JBossAS SVN: r93326 - in projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade: service and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Sep 9 15:26:16 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-09-09 15:26:16 -0400 (Wed, 09 Sep 2009)
New Revision: 93326

Modified:
   projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapability.java
   projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapabilityCache.java
   projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/PackageAdminImpl.java
Log:
[JBOSGI-151] Cannot resolve circular dependencies
Simplify cache API

Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapability.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapability.java	2009-09-09 18:50:07 UTC (rev 93325)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapability.java	2009-09-09 19:26:16 UTC (rev 93326)
@@ -144,20 +144,24 @@
       PackageAttribute ourParameters = exportPackage;
       PackageAttribute otherParameters = packageRequirement.getRequirePackage();
 
-      OSGiPackageCapabilityCache capabilityCache = OSGiPackageCapabilityCache.getInstance();
+      OSGiPackageCapabilityCache capabilityCache = OSGiPackageCapabilityCache.getInstance(bundleState);
       if (capabilityCache != null)
       {
+         String packageName = packageRequirement.getName();
+         
          if (capabilityCache.isBlacklisted(packageRequirement, capModule))
          {
-            log.debug("Blacklisted: " + requirement + " " + capModule);
+            log.debug("Blacklisted: " + packageName + " " + getModuleName(capModule));
             return false;
          }
          
          Module cachedModule = capabilityCache.getCachedModule(packageRequirement);
          if (cachedModule != null)
          {
-            log.debug("Cached: " + requirement + " " + capModule);
-            return cachedModule == capModule;
+            boolean isCached = (cachedModule == capModule);
+            if (isCached == true)
+               log.debug("Cached: " + packageName + " " + getModuleName(capModule));
+            return isCached;
          }
       }
       
@@ -221,6 +225,11 @@
       return validMatch;
    }
 
+   private String getModuleName(Module module)
+   {
+      return module.getName() + ":" + module.getVersion();
+   }
+   
    @Override
    public boolean equals(Object obj)
    {

Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapabilityCache.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapabilityCache.java	2009-09-09 18:50:07 UTC (rev 93325)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiPackageCapabilityCache.java	2009-09-09 19:26:16 UTC (rev 93326)
@@ -52,30 +52,13 @@
    private Map<String, List<Module>> moduleAssociations = new HashMap<String, List<Module>>();
    private Map<String, Module> blacklistedModules = new HashMap<String, Module>();
    private Map<String, Module> endorsedModules = new HashMap<String, Module>();
-   private static ThreadLocal<OSGiPackageCapabilityCache> threadLocal = new ThreadLocal<OSGiPackageCapabilityCache>();
 
-   public static OSGiPackageCapabilityCache createInstance()
+   public static OSGiPackageCapabilityCache getInstance(OSGiBundleState bundleState)
    {
-      OSGiPackageCapabilityCache cacheInstance = new OSGiPackageCapabilityCache();
-      threadLocal.set(cacheInstance);
-      return cacheInstance;
+      DeploymentUnit unit = bundleState.getDeploymentUnit();
+      return unit.getAttachment(OSGiPackageCapabilityCache.class);
    }
 
-   public static OSGiPackageCapabilityCache getInstance()
-   {
-      OSGiPackageCapabilityCache cacheInstance = threadLocal.get();
-      return cacheInstance;
-   }
-
-   public void release()
-   {
-      threadLocal.remove();
-   }
-
-   private OSGiPackageCapabilityCache()
-   {
-   }
-
    public void addModuleAssociation(PackageRequirement requirement, Module module)
    {
       String packageName = requirement.getName();
@@ -114,9 +97,8 @@
       return blacklisted;
    }
 
-   public void endorseModuleAssociations(OSGiBundleState bundleState)
+   public void endorseModuleAssociations(Module module)
    {
-      Module module = assertModule(bundleState);
       Map<String, Module> firstMatches = getMapOfFirstMatches(module);
       if (firstMatches.isEmpty() == false)
       {
@@ -127,9 +109,8 @@
       moduleAssociations.clear();
    }
    
-   public void blacklistModuleAssociations(OSGiBundleState bundleState)
+   public void blacklistModuleAssociations(Module module)
    {
-      Module module = assertModule(bundleState);
       Map<String, Module> firstMatches = getMapOfFirstMatches(module);
       if (firstMatches.isEmpty() == false)
       {
@@ -137,9 +118,11 @@
          blacklistedModules.putAll(firstMatches);
       }
       moduleAssociations.clear();
+   }
 
+   public void resetResolvedDependencies(ControllerContext context)
+   {
       StringBuffer message = new StringBuffer("Unresolved requirements ");
-      ControllerContext context = assertControllerContext(bundleState);
       DependencyInfo dependencyInfo = context.getDependencyInfo();
       for (DependencyItem iDependOn : dependencyInfo.getIDependOn(RequirementDependencyItem.class))
       {
@@ -161,24 +144,6 @@
       log.info(message);
    }
 
-   private ControllerContext assertControllerContext(OSGiBundleState bundleState)
-   {
-      DeploymentUnit unit = bundleState.getDeploymentUnit();
-      ControllerContext context = unit.getAttachment(ControllerContext.class);
-      if (context == null)
-         throw new IllegalStateException("Cannot obtain ControllerContext from: " + unit);
-      return context;
-   }
-
-   private Module assertModule(OSGiBundleState bundleState)
-   {
-      DeploymentUnit unit = bundleState.getDeploymentUnit();
-      Module module = unit.getAttachment(Module.class);
-      if (module == null)
-         throw new IllegalStateException("Cannot obtain Module from: " + unit);
-      return module;
-   }
-
    private Map<String, Module> getMapOfFirstMatches(Module module)
    {
       Map<String, Module> firstMatches = new HashMap<String, Module>();

Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/PackageAdminImpl.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/PackageAdminImpl.java	2009-09-09 18:50:07 UTC (rev 93325)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/PackageAdminImpl.java	2009-09-09 19:26:16 UTC (rev 93326)
@@ -28,11 +28,13 @@
 import java.util.List;
 
 import org.jboss.classloading.plugins.metadata.PackageCapability;
+import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.classloading.spi.dependency.RequirementDependencyItem;
 import org.jboss.classloading.spi.metadata.CapabilitiesMetaData;
 import org.jboss.classloading.spi.metadata.Capability;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
 import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.DependencyInfo;
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
@@ -182,35 +184,35 @@
          return true;
 
       int resolved = 1;
-      
-      // Repeatedly try to resolve the bundles until no more bundle can be resolved
-      OSGiPackageCapabilityCache cacheInstance = OSGiPackageCapabilityCache.createInstance();
-      try
+
+      // Repeatedly try to resolve the bundles until no more bundles can be resolved
+      OSGiPackageCapabilityCache cacheInstance = new OSGiPackageCapabilityCache();
+      while (resolved > 0)
       {
-         while (resolved > 0)
+         resolved = 0;
+         Iterator<AbstractBundleState> it = unresolvedBundles.iterator();
+         while (it.hasNext())
          {
-            resolved = 0;
-            Iterator<AbstractBundleState> it = unresolvedBundles.iterator();
-            while (it.hasNext())
+            OSGiBundleState bundleState = assertBundleState(it.next());
+            ControllerContext context = assertControllerContext(bundleState);
+            Module module = assertModule(bundleState);
+            
+            DeploymentUnit unit = bundleState.getDeploymentUnit();
+            unit.addAttachment(OSGiPackageCapabilityCache.class, cacheInstance);
+            
+            if (bundleManager.resolve(bundleState, false))
             {
-               OSGiBundleState bundleState = assertBundleState(it.next());
-               if (bundleManager.resolve(bundleState, false))
-               {
-                  cacheInstance.endorseModuleAssociations(bundleState);
-                  it.remove();
-                  resolved++;
-               }
-               else
-               {
-                  cacheInstance.blacklistModuleAssociations(bundleState);
-               }
+               cacheInstance.endorseModuleAssociations(module);
+               it.remove();
+               resolved++;
             }
+            else
+            {
+               cacheInstance.blacklistModuleAssociations(module);
+               cacheInstance.resetResolvedDependencies(context);
+            }
          }
       }
-      finally
-      {
-         cacheInstance.release();
-      }
 
       // Log unresolved bundles
       for (AbstractBundleState aux : unresolvedBundles)
@@ -249,6 +251,24 @@
       return (OSGiBundleState)abstractState;
    }
 
+   private ControllerContext assertControllerContext(OSGiBundleState bundleState)
+   {
+      DeploymentUnit unit = bundleState.getDeploymentUnit();
+      ControllerContext context = unit.getAttachment(ControllerContext.class);
+      if (context == null)
+         throw new IllegalStateException("Cannot obtain ControllerContext from: " + unit);
+      return context;
+   }
+
+   private Module assertModule(OSGiBundleState bundleState)
+   {
+      DeploymentUnit unit = bundleState.getDeploymentUnit();
+      Module module = unit.getAttachment(Module.class);
+      if (module == null)
+         throw new IllegalStateException("Cannot obtain Module from: " + unit);
+      return module;
+   }
+
    private static class ExportedPackageImpl implements ExportedPackage
    {
       private Bundle bundle;




More information about the jboss-cvs-commits mailing list