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