Hi Erik,

I remember similar problems with this enhanced method in the past
so I just checked your test with ObjectDB, but now it works well
with no exception.

The code that is produced by the ObjectDB Enhancer is slightly different
and instead of jdoFieldNames.length there is a constant that is calculated
at enhancement time. Hopefully this change should do the difference.

Regards,

Ilan

----- Original Message ----- From: "Erik Bengtson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>; <[email protected]>
Sent: Saturday, June 24, 2006 11:15 PM
Subject: class loading issue when super class has reference to sub class


Hi,

There is an issue when initialising a class when super class has reference to
sub class
(Cclass extending Bclass extending Aclass and Aclass has a reference to Cclass)

public class Aclass {
private Cclass cclass;
}
public class Bclass extends Aclass {
}

public class Cclass extends Bclass {
}

public class Main {
public static void main(String[] args) throws Exception {
//The following line throws ExceptionInInitializerError caused by
java.lang.NullPointerException
System.out.println(Class.forName("org.jpox.test.Bclass"));
}
}


Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jpox.test.Aclass.___jdo$loadClass(Aclass.java)
at org.jpox.test.Aclass.__jdoFieldTypesInit(Aclass.java)
at org.jpox.test.Aclass.<clinit>(Aclass.java)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jpox.test.Main.main(Main.java:6)
Caused by: java.lang.NullPointerException
at org.jpox.test.Bclass.jdoGetManagedFieldCount(Bclass.java)
at org.jpox.test.Cclass.__jdoGetInheritedFieldCount(Cclass.java)
at org.jpox.test.Cclass.<clinit>(Cclass.java)
... 8 more


See for a diagram
http://www.jpox.org/servlet/jira/browse/ENHANCER-58


The issue is due to the implementation of the jdoGetManagedFieldCount

The implementation for topmost classes in the hierarchy:
protected static int jdoGetManagedFieldCount () {
return jdoFieldNames.length;
}
The implementation for subclasses:
protected static int jdoGetManagedFieldCount () {
return <pc-superclass>.jdoGetManagedFieldCount() +
jdoFieldNames.length;
}





Reply via email to