persistence@glassfish.java.net

Re: property acess type error in orm.xml descriptor

From: Guy Pelletier <guy.pelletier_at_oracle.com>
Date: Tue, 2 May 2006 11:00:14 -0400

Sahoo,

There was an internal bug filed here. The fix was made to our source and it
is being included in the next persistence drop.

Cheers,
Guy

----- Original Message -----
From: "Sanjeeb Kumar Sahoo" <Sanjeeb.Sahoo_at_Sun.COM>
To: <persistence_at_glassfish.dev.java.net>
Sent: Tuesday, May 02, 2006 10:58 AM
Subject: Re: property acess type error in orm.xml descriptor


> Guy,
>
> Do you know the bug id of this *serious* bug?
>
> Thanks,
> Sahoo
> Guy Pelletier wrote:
>> Wonseok,
>> This is a known issue and it has been corrected and will be submitted to
>> CVS today.
>> Cheers,
>> Guy
>>
>> ----- Original Message -----
>> *From:* Wonseok Kim <mailto:guruwons_at_gmail.com>
>> *To:* persistence_at_glassfish.dev.java.net
>> <mailto:persistence_at_glassfish.dev.java.net>
>> *Sent:* Tuesday, May 02, 2006 10:32 AM
>> *Subject:* property acess type error in orm.xml descriptor
>>
>> Hi, persistence guys~
>>
>> During testing persistence examples through orm.xml, I got error
>> regarding property access type.
>> The entity class has no annotations, all mappings are declared in
>> orm.xml.
>> The access type is declared as PROPERTY explicitly.
>>
>> public class Person implements java.io.Serializable {
>> String _name;
>> String _address;
>> public Person(){
>> }
>> public Person(String name){
>> this._name = name;
>> }
>> public String getName() {
>> return _name;
>> }
>> public void setName(String name) {
>> this._name = name;
>> }
>> public String getAddress() {
>> return _address;
>> }
>> public void setAddress(String address) {
>> this._address = address;
>> }
>> public String toString(){
>> return "Person: {"+"(name = "+_name +", address = " +
>> _address + ")}";
>> }
>> }
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <entity-mappings
>> xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="
>> http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
>> http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">
>> <entity name="Person" class="
>> com.sun.s1asdev.ejb.ejb30.persistence.ormdesc.par.Person"
>> access="PROPERTY" >
>> <table name="EJB30_PERSISTENCE_DESC_PERSON"/>
>> <attributes>
>> <id name="name">
>> <column name="NAME"/>
>> </id>
>> <basic name="address">
>> <column name="ADDRESS"/>
>> </basic>
>> </attributes>
>> </entity>
>> </entity-mappings>
>>
>> When I deploy the application following error occurs.
>>
>> Exception [TOPLINK-7216] (Oracle TopLink Essentials - 2006.4
>> (Build 060420)):
>> oracle.toplink.essentials.exceptions.ValidationException
>> Exception Description: Cannot determine the type (class) of
>> attribute [name] in entity class
>> [com.sun.s1asdev.ejb.ejb30.persistence.ormdesc.par.Person].
>> Internal Exception: java.lang.NoSuchFieldException: name
>> at
>>
>> oracle.toplink.essentials.exceptions.ValidationException.unableToDetermineClassForAttribute(ValidationException.java:1666)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataHelper.getClassForAttribute
>> (MetadataHelper.java:206)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.XMLAccessor.getRelationType(XMLAccessor.java:326)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.XMLAccessor.getReferenceClass
>> (XMLAccessor.java:314)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.XMLAccessor.isEmbedded(XMLAccessor.java:550)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataProcessor.processAccessor
>> (MetadataProcessor.java:505)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.EntityMappingsXMLProcessor.processAttributes(EntityMappingsXMLProcessor.java:1068)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.EntityMappingsXMLProcessor.processEntityNode
>> (EntityMappingsXMLProcessor.java:1413)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.EntityMappingsXMLProcessor.processEntities(EntityMappingsXMLProcessor.java:1313)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.xml.EntityMappingsXMLProcessor.processEntityMappings
>> (EntityMappingsXMLProcessor.java:1501)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.processEntityMappingsXML(EntityManagerSetupImpl.java:534)
>> at
>>
>> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy
>> (EntityManagerSetupImpl.java:398)
>> at
>>
>> oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createContainerEntityManagerFactory(EntityManagerFactoryProvider.java:145)
>> at
>> com.sun.enterprise.server.PersistenceUnitLoaderImpl.load
>> (PersistenceUnitLoaderImpl.java:195)
>> at
>>
>> com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:77)
>> at
>>
>> com.sun.enterprise.server.AbstractLoader.loadPersistenceUnits(AbstractLoader.java
>> :849)
>> at
>>
>> com.sun.enterprise.server.ApplicationLoader.load(ApplicationLoader.java:179)
>>
>>
>> It seems to me that MetadataHelper.getClassForAttribute() has some
>> assumption - corresponding field exists for the attribute. So it
>> does Class.getField() to identify the type of attribute. I think
>> it is incorrect assumption in this entity case.
>>
>> I attach test sources, it can be unzipped into
>> appserv-tests/devtests/ejb/ejb30/persistence and run as other tests.
>>
>> If this is a bug, it seems to me serious bug - very basic
>> behaviour though descriptor fails....-.-;
>>
>> Regards,
>>
>> Wonseok Kim
>>
>