Thanks Ilan, I will do this way them, but this requires users to recompile and reenhance child classes if super classes are changed.
Regards, Erik Bengtson Quoting Ilan Kirsh <[EMAIL PROTECTED]>: > 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; > > } > > > > > > > > >
