[ http://issues.apache.org/jira/browse/HADOOP-367?page=all ]

Owen O'Malley resolved HADOOP-367.
----------------------------------

    Resolution: Duplicate

This has been fixed across several patches by using the new 
ReflectionUtils.newInstance in all contexts. We currently require java 5.0, so 
clearly this bug isn't present anymore.

> Static blocks do not automatically run when a class is loaded in Java 5.0
> -------------------------------------------------------------------------
>
>                 Key: HADOOP-367
>                 URL: http://issues.apache.org/jira/browse/HADOOP-367
>             Project: Hadoop
>          Issue Type: Bug
>          Components: dfs
>    Affects Versions: 0.4.0
>         Environment: Java 5.0
>            Reporter: Benjamin Reed
>         Attachments: f.patch, reflection.patch
>
>
> There seems to be a change that happened between 1.4 and 1.5 with respect to 
> static initializers. I can't find this documented, but I can reproduce with a 
> very simple program. Basically, a static initializer is not called unless a 
> static member/method of the class is accessed or an instance is created. This 
> is actually what the JLS says, but until 1.5 the static initializers ran when 
> the class was loaded. Note that this behavior only occurs when running with 
> the 1.5 JRE AND compiling for 1.5.
> For many Writables this isn't an issue, so the fallback behavior of the 
> WritableFactory works, but Block is package private, so loadEdits fails when 
> called from org.apache.hadoop.io.ArrayWritable.readFields() yielding the 
> following trace:
> Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: 
> Class org.apache.hadoop.io.WritableFactories can not access a member of class 
> org.apache.hadoop.dfs.Block with modifiers "public"
>         at 
> org.apache.hadoop.io.WritableFactories.newInstance(WritableFactories.java:49)
>         at 
> org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:81)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSEdits(FSDirectory.java:532)
>         at org.apache.hadoop.dfs.FSDirectory.loadFSImage(FSDirectory.java:470)
>         at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:307)
>         at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:177)
>         at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:91)
>         at org.apache.hadoop.dfs.NameNode.<init>(NameNode.java:84)
>         at org.apache.hadoop.dfs.NameNode.main(NameNode.java:491)

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

        

Reply via email to