Hi, I experimented with classes where I manually added the code that is generated by the enhancer. I could reproduce the class loading issue only with jdk1.4. I do not get an exception when compiling and running the classes with jdk 1.5. I can confirm that replacing the expression jdoFieldNames.length by a constant in the implementation of jdoGetManagedFieldCount solves the problem. Regards Michael > You can still call .jdoGetManagedFieldCount() > (so the super class may be changed without recompiling the subclass) > just replace the jdoFieldNames.length component with a constant. > > Ilan > > > ----- Original Message ----- From: "Erik Bengtson" > To: ; > Sent: Sunday, June 25, 2006 12:55 PM > Subject: Re: class loading issue when super class has reference to sub > class > > >> 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 : >> >>> 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" >>> To: ; >>> 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.(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.(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 .jdoGetManagedFieldCount() + >>> > jdoFieldNames.length; >>> > } >>> > >>> > >>> > >>> >>> >>> >> >> >> >> >> >> > -- Michael Bouschen Tech@Spree Engineering GmbH mailto:mbo.tech@spree.de http://www.tech.spree.de/ Tel.:++49/30/235 520-33 Buelowstr. 66 Fax.:++49/30/2175 2012 D-10783 Berlin