db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ilan Kirsh <ki...@objectdb.com>
Subject Re: class loading issue when super class has reference to sub class
Date Sun, 25 Jun 2006 12:17:07 GMT
You can still call <pc-superclass>.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" <erik@jpox.org>
To: <jdo-experts-ext@sun.com>; <jdo-dev@db.apache.org>
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 <kirsh@objectdb.com>:
>
>> 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" <erik@jpox.org>
>> To: <jdo-experts-ext@sun.com>; <jdo-dev@db.apache.org>
>> 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;
>> > }
>> >
>> >
>> >
>>
>>
>>
>
>
>
>
>
>



Mime
View raw message