Raghu Angadi created PIG-2815:
---------------------------------

             Summary: class loader management in PigContext
                 Key: PIG-2815
                 URL: https://issues.apache.org/jira/browse/PIG-2815
             Project: Pig
          Issue Type: Bug
          Components: impl
    Affects Versions: 0.9.0
            Reporter: Raghu Angadi
             Fix For: 0.11


The way {{PigContext.classloader}} and resolveClassName() are managed can lead 
to strange class loading issues, especially when not all {{register}} 
statements are at the top (example in the first comment).

Two factors contribute to this: sometimes only one of them and sometimes 
together:

 # a new classloader (CL) is created after registering each jar.
    ** but the new jar's parent is the root CL rather than previous CL, 
effectively throwing previous CL away.
 # resolveClassName() caches classes based on just the name
    ** A class is not defined by name alone. Classes loaded by two different 
unrelated CLs are different objects even if both extract the class from same 
physical jar file.
    ** because of (1), the cached class is not necessarily same as the class 
that would be loaded based on 'current' CL

having different class objects for same class have many subtle side effects. 
e.g. there would be two instances of static variables. 

I think both should be fixed.. thought fixing one of them might be good enough 
in many cases. I will add a patch.
       




--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to