[ 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