0 Replies Latest reply on Nov 18, 2009 6:28 AM by Ed Roberts

    Is the order of URLs from getResources correct ?

    Ed Roberts Newbie

      I have been trying to understand how the class loaders work in JBOSS 5.1.0 GA (JDK6 distribution) with regards to resources.

      I am testing with a resource file in META-INF/services of many consecutively numbered jars, strategically placed in the various jar folders, in order to determine in which order the jars are loaded. I am running JBOSS on windows and connecting using a remote debugger in Eclipse, in order to breakpoint each URL passed back.

      In conf/jboss-service.xml there are a number of entries; the common/lib, server/?/lib, and two additional entries to deal with our particular deployment (the addition of which seems misguided, but I don't think they cloud my question in any way). Am I correct in thinking these locations form part of the System Class Loader ?

      (SAR Test)
      When performing getResources(META-INF/services/my.resource.file) from a classloader of a class located within a SAR deployment, the search order is
      1) the jars within the current SAR
      2) the jars within other SARs within the same class loader domain
      3) classpath entries defined in conf/jboss-service.xml but in a different sequence;
      server/?/lib (defined first)
      additional/lib (defined third)
      additional/lib/jdbc (defined fourth)
      common/lib (defined second)

      (WAR Test)
      When performing getResources(META-INF/services/my.resource.file) from a classloader of a class located within a WAR deployment, the search order is
      1) some of the classpath entries defined in conf/jboss-service.xml and in a different sequence;
      additional/lib (defined third)
      common/lib (defined second)
      server/?/lib (defined first)
      2) the jars within the current WAR
      3) the jars within SARs within the same class loader domain
      4) the last of the classpath entries defined in conf/jboss-service.xml
      additional/lib/jdbc (defined fourth)

      The order that the tests have produced is unexpected. Perhaps I'm missing something obvious. Nevertheless, if someone can help explain the behaviour I would appreciate it.

      The reason I am asking is that we are deploying many SARs and WARs, and multiple versions of some jars are unfortunately unavoidable. I want to be able to advise team members on the intricacies of the class loading so they are forewarned and can resolve any issues. I believe I understand the process of isolation using jboss-classloading.xml files and the hierarchy behaves as one would expect, but when I consider how say XML Parsers are typically located, knowing the behaviour of getResources is as important to understand.

      Any help gratefully received