[prev in list] [next in list] [prev in thread] [next in thread]
List: ojb-dev
Subject: Re: [PATCH] StackOverflowException in DescriptorRepository
From: Ilkka Priha <impriha () surfeu ! fi>
Date: 2004-01-30 15:42:22
Message-ID: 401A7B5E.5090704 () surfeu ! fi
[Download RAW message or body]
Thanks Armin,
OJB has potential for really powerful solutions. Some additional dynamics based
the decriptor repository, reflection and run-time byte code generation enable
development of wonderful design patterns :-)
-- Ilkka
Armin Waibel wrote:
> Hi Ilkka,
>
> I checked in your patch in CVS head (not in 1.0_branch).
> Many thanks!
>
> By the way, your solution for localized resource bundles is really
> impressive. Maybe we need a rubric "best practices".
>
> regards,
> Armin
>
> Ilkka Priha wrote:
>
>> Hi,
>>
>> The attached class descriptor causes a stack overflow during a query
>> if there are not separate class descriptors for all extent classes,
>> too. This is because in such case they inherit the class descriptor of
>> their parent, which causes an infinite recursion when
>> DescriptorRepository resolves extent classes of the parent. However,
>> this descriptor is very useful, e.g. when maintaining localized
>> resource bundles in a database. It would be redundant to redefine the
>> same descriptor for all supported locales.
>>
>> The following simple patch tests cyclic references and enables this
>> kind of descriptors without side effects to current behavior.
>>
>> -- Ilkka
>>
>>
>> Index: DescriptorRepository.java
>> ===================================================================
>> retrieving revision 1.45
>> diff -u -r1.45 DescriptorRepository.java
>> --- DescriptorRepository.java 7 Jan 2004 19:11:10 -0000 1.45
>> +++ DescriptorRepository.java 29 Jan 2004 12:16:41 -0000
>> @@ -362,6 +362,12 @@
>> {
>> Class extentClass = (Class) iter.next();
>> ClassDescriptor extCld = getDescriptorFor(extentClass);
>> + if (aCld.equals(extCld))
>> + {
>> + // prevent infinite recursion caused by cyclic
>> references
>> + continue;
>> + }
>> +
>> if (!extCld.isInterface())
>> {
>> concreteSubclasses.add(extentClass);
>> @@ -391,6 +397,12 @@
>> {
>> Class extentClass = (Class) iter.next();
>> ClassDescriptor extCld = getDescriptorFor(extentClass);
>> + if (aCld.equals(extCld))
>> + {
>> + // prevent infinite recursion caused by cyclic
>> references
>> + continue;
>> + }
>> +
>> if (!extCld.isInterface())
>> {
>> concreteSubclassClds.add(extCld);
>>
>>
>> <class-descriptor class="org.norther.tammi.Dictionary"
>> table="RESOURCE_LOCALE">
>> <extent-class class-ref="tammi.manual.Dictionary_en"/>
>> <extent-class class-ref="tammi.manual.Dictionary_fi"/>
>> <extent-class class-ref="tammi.manual.Dictionary_sv"/>
>> <extent-class class-ref="tammi.manual.Dictionary_fr"/>
>> <extent-class class-ref="tammi.manual.Dictionary_de"/>
>> <extent-class class-ref="tammi.manual.Dictionary_ru"/>
>> <field-descriptor
>> name="Id"
>> column="ID"
>> jdbc-type="BIGINT"
>> primarykey="true"
>> autoincrement="true"/>
>> <field-descriptor
>> name="Language"
>> column="LANGUAGE"
>> jdbc-type="VARCHAR"/>
>> <field-descriptor
>> name="Country"
>> column="COUNTRY"
>> jdbc-type="VARCHAR"/>
>> <field-descriptor
>> name="Variant"
>> column="VARIANT"
>> jdbc-type="VARCHAR"/>
>> <collection-descriptor
>> name="Resources"
>> element-class-ref="fi.simsoft.tammi.LocalizedValue"
>> refresh="true"
>> auto-retrieve="true"
>> auto-update="true"
>> auto-delete="true">
>> <inverse-foreignkey field-ref="LocaleId"/>
>> </collection-descriptor>
>> </class-descriptor>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-dev-help@db.apache.org
>>
>>
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-dev-help@db.apache.org
>
> .
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic