[jboss-jira] [JBoss JIRA] Updated: (JBREFLECT-81) All ClassLoaders created during tests must have a hard reference on them to avoid gc

Flavia Rainone (JIRA) jira-events at lists.jboss.org
Thu Dec 10 13:26:30 EST 2009


     [ https://jira.jboss.org/jira/browse/JBREFLECT-81?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Flavia Rainone updated JBREFLECT-81:
------------------------------------

    Description: 
Otherwise, if the classloader is gc'ed during test execution, the test will fail because the ClassPool will enter an illegal state, for being associated with a null class loader.

According to Kabir, RepositoryClassPoolTestCase.testURLChildOfGlobalUcl fails on JDK5/OS X because of this:

  |    public void testURLChildOfGlobalUcl() throws Exception
  |    {
  |       L globalLoader = testScenario.createLoader(new CLDeploymentBuilder("GLOBAL", JAR_A_1));
  |       L childALoader = createChildURLLoader(globalLoader, JAR_B_1);
  |       
  |       testScenario.loadClass(childALoader, globalLoader, CLASS_A);
  |       testScenario.loadClass(childALoader, CLASS_B);
  |       
  |       L childBLoader = createChildURLLoader(globalLoader, JAR_A_2);
  |       System.out.println("========> G" + globalLoader);
  |       System.out.println("========> A " + childALoader);
  |       System.out.println("========> B " + childBLoader);
  |       testScenario.loadClass(childBLoader, globalLoader, CLASS_A);      
  |    }
  

The output shows G and A to always have a classloader, probably because the testScenario call maintains a strong reference to the loader? B sometimes is shown to have null loader, so createChildURLLoader needs to be reworked somehow to maintain a strong reference to the loader.


  was:
According to Kabir, RepositoryClassPoolTestCase.testURLChildOfGlobalUcl fails on JDK5/OS X because of this:

  |    public void testURLChildOfGlobalUcl() throws Exception
  |    {
  |       L globalLoader = testScenario.createLoader(new CLDeploymentBuilder("GLOBAL", JAR_A_1));
  |       L childALoader = createChildURLLoader(globalLoader, JAR_B_1);
  |       
  |       testScenario.loadClass(childALoader, globalLoader, CLASS_A);
  |       testScenario.loadClass(childALoader, CLASS_B);
  |       
  |       L childBLoader = createChildURLLoader(globalLoader, JAR_A_2);
  |       System.out.println("========> G" + globalLoader);
  |       System.out.println("========> A " + childALoader);
  |       System.out.println("========> B " + childBLoader);
  |       testScenario.loadClass(childBLoader, globalLoader, CLASS_A);      
  |    }
  

The output shows G and A to always have a classloader, probably because the testScenario call maintains a strong reference to the loader? B sometimes is shown to have null loader, so createChildURLLoader needs to be reworked somehow to maintain a strong reference to the loader.




> All ClassLoaders created during tests must have a hard reference on them to avoid gc
> ------------------------------------------------------------------------------------
>
>                 Key: JBREFLECT-81
>                 URL: https://jira.jboss.org/jira/browse/JBREFLECT-81
>             Project: JBoss Reflection
>          Issue Type: Task
>          Components: Class Pool
>    Affects Versions: JBossReflection.2.0.2.GA
>            Reporter: Flavia Rainone
>            Assignee: Flavia Rainone
>             Fix For: JBossReflection.2.2.0-Alpha
>
>
> Otherwise, if the classloader is gc'ed during test execution, the test will fail because the ClassPool will enter an illegal state, for being associated with a null class loader.
> According to Kabir, RepositoryClassPoolTestCase.testURLChildOfGlobalUcl fails on JDK5/OS X because of this:
>   |    public void testURLChildOfGlobalUcl() throws Exception
>   |    {
>   |       L globalLoader = testScenario.createLoader(new CLDeploymentBuilder("GLOBAL", JAR_A_1));
>   |       L childALoader = createChildURLLoader(globalLoader, JAR_B_1);
>   |       
>   |       testScenario.loadClass(childALoader, globalLoader, CLASS_A);
>   |       testScenario.loadClass(childALoader, CLASS_B);
>   |       
>   |       L childBLoader = createChildURLLoader(globalLoader, JAR_A_2);
>   |       System.out.println("========> G" + globalLoader);
>   |       System.out.println("========> A " + childALoader);
>   |       System.out.println("========> B " + childBLoader);
>   |       testScenario.loadClass(childBLoader, globalLoader, CLASS_A);      
>   |    }
>   
> The output shows G and A to always have a classloader, probably because the testScenario call maintains a strong reference to the loader? B sometimes is shown to have null loader, so createChildURLLoader needs to be reworked somehow to maintain a strong reference to the loader.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list