db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Bouschen <mbo.t...@spree.de>
Subject Re: class loading issue when super class has reference to sub class
Date Mon, 26 Jun 2006 16:06:55 GMT
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 <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;
>>> > }
>>> >
>>> >
>>> >
>>>
>>>
>>>
>>
>>
>>
>>
>>
>>
>


-- 
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


Mime
View raw message