Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-367

Static blocks do not automatically run when a class is loaded in Java 5.0

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 0.4.0
    • None
    • None
    • None
    • Java 5.0

    Description

      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)

      Attachments

        1. f.patch
          14 kB
          Benjamin Reed
        2. reflection.patch
          10 kB
          Hairong Kuang

        Issue Links

          Activity

            People

              Unassigned Unassigned
              breed Benjamin Reed
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: