[jboss-user] [JBoss Microcontainer Development] - Endless loop at AS server startup

Ales Justin do-not-reply at jboss.com
Mon Jun 21 17:39:54 EDT 2010


Ales Justin [http://community.jboss.org/people/alesj] replied to the discussion

"Endless loop at AS server startup"

To view the discussion, visit: http://community.jboss.org/message/549028#549028

--------------------------------------------------------------
> The cache may have side effects because the code in #4 and #5 is not always executed when a client calls #3.
> Could you please review carefully or alternatively change the algorithm so it becomes usable for large sets of reqs/caps and mods.
Adding this patch doesn't change AS boot time in measurable way, at least not for default and all.

Index: classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java    (revision 106215)
+++ classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java    (working copy)
@@ -85,6 +85,9 @@
    
    /** The requirements */
    private List<RequirementDependencyItem> requirementDependencies;
+   
+   /** Already resolved dependency items */
+   private Map<RequirementDependencyItem, Module> resolved;
 
    /** Any lifecycle associated with the classloader */
    private LifeCycle lifeCycle;
@@ -94,7 +97,7 @@
    
    /** Requirements resolved to us */
    private Set<RequirementDependencyItem> depends = new CopyOnWriteArraySet<RequirementDependencyItem>();
-   
+
    /**
     * Register a classloader for a module
     * 
@@ -1191,6 +1194,7 @@
             addIDependOn(item);
             requirementDependencies.add(item);
          }
+         resolved = new ConcurrentHashMap<RequirementDependencyItem, Module>();
       }
    }
 
@@ -1205,6 +1209,7 @@
             removeIDependOn(item);
       }
       requirementDependencies = null;
+      resolved = null;
    }
 
    /**
@@ -1216,7 +1221,10 @@
       if (requirementDependencies != null && requirementDependencies.isEmpty() == false)
       {
          for (RequirementDependencyItem item : requirementDependencies)
+         {
             item.unresolved(controller);
+            resolved.remove(item);
+         }
       }
    }
 
@@ -1336,14 +1344,33 @@
     */
    protected Module resolveModule(RequirementDependencyItem dependency, boolean resolveSpace)
    {
+      if (resolved != null)
+      {
+         Module resolvedModule = resolved.get(dependency);
+         if (resolvedModule != null)
+            return resolvedModule;
+      }
+
       ClassLoadingSpace space = getClassLoadingSpace();
       if (resolveSpace && space != null)
          space.resolve(this);
 
+      if (resolved != null)
+      {
+         Module resolvedModule = resolved.get(dependency);
+         if (resolvedModule != null)
+            return resolvedModule;
+      }
+
       Requirement requirement = dependency.getRequirement();
-      return checkDomain().resolveModule(this, requirement);
+      Module result = checkDomain().resolveModule(this, requirement);
+
+      if (result != null && resolved != null)
+         resolved.put(dependency, result);
+
+      return result;
    }


> Perhaps these large sets should be mocked in the CL testsuite.
But I guess, as you mentioned, it will only show in osgi config, with compendiums large requirement set.

--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/549028#549028]

Start a new discussion in JBoss Microcontainer Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2115]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100621/70342ed5/attachment.html 


More information about the jboss-user mailing list