[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