You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Chiah Tong Kiat <ct...@silicomp.com.sg> on 2003/07/09 04:38:06 UTC

Help in store function call in PersistenceBroker

Hi

 

I'm having some problem when I attempt to store the database.

 

It's throwing the stack trace following stack trace

 

com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:424)
2003-07-0

9 02:03:00,843 ERROR [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:424) -
org.apache.ojb.broker.PersistenceBrokerException: C

ould not generate primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.Array

IndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:263)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

rethrown as org.apache.ojb.broker.PersistenceBrokerException: Could not
generate

 primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:275)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:446)
2003-07-0

9 02:03:01,187 DEBUG [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:446) - Closing broker in finally setMDEDetails() : TX

 

The problem happen when at the BrokerHelp

 

Where the class descriptor class is return 2 primary key

And the identity class return only contains one (which is correct since at
the reference mapping I'm only setting only one)


RE: Help in store function call in PersistenceBroker

Posted by Chiah Tong Kiat <ct...@silicomp.com.sg>.
That's true.  I've a table with reference-descriptor tag with one key FK
pointing to another table that is define with 2 primary key.

When PB attempt to store the parent, it's try to create a Identity object
that is looking for 2 keys which it's only passing in value.  That's when
it's trying a exception.



-----Original Message-----
From: Edson Carlos Ericksson Richter
[mailto:edson.richter@mgrinformatica.com.br] 
Sent: Wednesday, July 09, 2003 6:59 PM
To: OJB Users List
Subject: Re: Help in store function call in PersistenceBroker

The more precise check is if

        if( ojbFkFields.lenght > refPkValues.lenght )
            throw new PersistenceBrokerException("The number of fields in
foreign key is greater than the number of fields in primary key (" +
realObj.getClass().getName() + ")");


Just m2c,

Edson Richter

----- Original Message ----- 
From: "Edson Carlos Ericksson Richter" <ed...@mgrinformatica.com.br>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Wednesday, July 09, 2003 7:47 AM
Subject: Re: Help in store function call in PersistenceBroker


I had this (exactly) stack trace when I made some reference (foreign key)
with two fields mapping for a table that has only one field in primary key.
I think OJB must check if fkfields[].length == pkfield[].lenght, and throw a
better explanatory exception. The code in PersistenceBrokerImpl should be
similar to

        // MBAIRD: we have 'disassociated' this object from the referenced
object,
        // the object representing the ord is now null, so set the fk to
null.
        if (ref == null)
        {
            refPkValues = new Object[objFkFields.length];
        }
        else
        {
            // BRJ: ref may be Proxy
            Class refClass = ProxyHelper.getRealClass(ref);
            ClassDescriptor refCld =
descriptorRepository.getDescriptorFor(refClass);

            refPkValues = brokerHelper.getKeyValues(refCld, ref, false);
        }

        if( ojbFkFields.lenght != refPkValues.lenght )
            throw new PersistenceBrokerException("The number of fields in
foreign key doesn't match the number of fields in primary key (" +
realObj.getClass().getName() + ")");


        for (int i = 0; i < objFkFields.length; i++)
        {
            objFkFields[i].getPersistentField().set(realObj,
refPkValues[i]);
        }


Jakob, Armin, Thomas can someone confirm this?

Edson Richter

----- Original Message ----- 
From: "Chiah Tong Kiat" <ct...@silicomp.com.sg>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Tuesday, July 08, 2003 11:38 PM
Subject: Help in store function call in PersistenceBroker


Hi



I'm having some problem when I attempt to store the database.



It's throwing the stack trace following stack trace



com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:424)
2003-07-0

9 02:03:00,843 ERROR [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:424) -
org.apache.ojb.broker.PersistenceBrokerException: C

ould not generate primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.Array

IndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:263)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

rethrown as org.apache.ojb.broker.PersistenceBrokerException: Could not
generate

 primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:275)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:446)
2003-07-0

9 02:03:01,187 DEBUG [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:446) - Closing broker in finally setMDEDetails() : TX



The problem happen when at the BrokerHelp



Where the class descriptor class is return 2 primary key

And the identity class return only contains one (which is correct since at
the reference mapping I'm only setting only one)




----------------------------------------------------------------------------
----


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.497 / Virus Database: 296 - Release Date: 4/7/2003


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Help in store function call in PersistenceBroker

Posted by Edson Carlos Ericksson Richter <ed...@mgrinformatica.com.br>.
The more precise check is if

        if( ojbFkFields.lenght > refPkValues.lenght )
            throw new PersistenceBrokerException("The number of fields in
foreign key is greater than the number of fields in primary key (" +
realObj.getClass().getName() + ")");


Just m2c,

Edson Richter

----- Original Message ----- 
From: "Edson Carlos Ericksson Richter" <ed...@mgrinformatica.com.br>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Wednesday, July 09, 2003 7:47 AM
Subject: Re: Help in store function call in PersistenceBroker


I had this (exactly) stack trace when I made some reference (foreign key)
with two fields mapping for a table that has only one field in primary key.
I think OJB must check if fkfields[].length == pkfield[].lenght, and throw a
better explanatory exception. The code in PersistenceBrokerImpl should be
similar to

        // MBAIRD: we have 'disassociated' this object from the referenced
object,
        // the object representing the ord is now null, so set the fk to
null.
        if (ref == null)
        {
            refPkValues = new Object[objFkFields.length];
        }
        else
        {
            // BRJ: ref may be Proxy
            Class refClass = ProxyHelper.getRealClass(ref);
            ClassDescriptor refCld =
descriptorRepository.getDescriptorFor(refClass);

            refPkValues = brokerHelper.getKeyValues(refCld, ref, false);
        }

        if( ojbFkFields.lenght != refPkValues.lenght )
            throw new PersistenceBrokerException("The number of fields in
foreign key doesn't match the number of fields in primary key (" +
realObj.getClass().getName() + ")");


        for (int i = 0; i < objFkFields.length; i++)
        {
            objFkFields[i].getPersistentField().set(realObj,
refPkValues[i]);
        }


Jakob, Armin, Thomas can someone confirm this?

Edson Richter

----- Original Message ----- 
From: "Chiah Tong Kiat" <ct...@silicomp.com.sg>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Tuesday, July 08, 2003 11:38 PM
Subject: Help in store function call in PersistenceBroker


Hi



I'm having some problem when I attempt to store the database.



It's throwing the stack trace following stack trace



com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:424)
2003-07-0

9 02:03:00,843 ERROR [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:424) -
org.apache.ojb.broker.PersistenceBrokerException: C

ould not generate primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.Array

IndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:263)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

rethrown as org.apache.ojb.broker.PersistenceBrokerException: Could not
generate

 primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:275)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:446)
2003-07-0

9 02:03:01,187 DEBUG [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:446) - Closing broker in finally setMDEDetails() : TX



The problem happen when at the BrokerHelp



Where the class descriptor class is return 2 primary key

And the identity class return only contains one (which is correct since at
the reference mapping I'm only setting only one)




----------------------------------------------------------------------------
----


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.497 / Virus Database: 296 - Release Date: 4/7/2003


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Help in store function call in PersistenceBroker

Posted by Edson Carlos Ericksson Richter <ed...@mgrinformatica.com.br>.
I had this (exactly) stack trace when I made some reference (foreign key)
with two fields mapping for a table that has only one field in primary key.
I think OJB must check if fkfields[].length == pkfield[].lenght, and throw a
better explanatory exception. The code in PersistenceBrokerImpl should be
similar to

        // MBAIRD: we have 'disassociated' this object from the referenced
object,
        // the object representing the ord is now null, so set the fk to
null.
        if (ref == null)
        {
            refPkValues = new Object[objFkFields.length];
        }
        else
        {
            // BRJ: ref may be Proxy
            Class refClass = ProxyHelper.getRealClass(ref);
            ClassDescriptor refCld =
descriptorRepository.getDescriptorFor(refClass);

            refPkValues = brokerHelper.getKeyValues(refCld, ref, false);
        }

        if( ojbFkFields.lenght != refPkValues.lenght )
            throw new PersistenceBrokerException("The number of fields in
foreign key doesn't match the number of fields in primary key (" +
realObj.getClass().getName() + ")");


        for (int i = 0; i < objFkFields.length; i++)
        {
            objFkFields[i].getPersistentField().set(realObj,
refPkValues[i]);
        }


Jakob, Armin, Thomas can someone confirm this?

Edson Richter

----- Original Message ----- 
From: "Chiah Tong Kiat" <ct...@silicomp.com.sg>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Tuesday, July 08, 2003 11:38 PM
Subject: Help in store function call in PersistenceBroker


Hi



I'm having some problem when I attempt to store the database.



It's throwing the stack trace following stack trace



com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:424)
2003-07-0

9 02:03:00,843 ERROR [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:424) -
org.apache.ojb.broker.PersistenceBrokerException: C

ould not generate primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.Array

IndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:263)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

rethrown as org.apache.ojb.broker.PersistenceBrokerException: Could not
generate

 primary key values for given Identity

com.fedex.data.ShipmentCoreClearanceImpl{2057001}, exception was
java.lang.ArrayIndexOutOfBoundsException

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:275)

        at
org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:204)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assertFkAssignment(Persiste
nceBrokerImpl.java:730)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Persiste
nceBrokerImpl.java:2104)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(PersistenceBroker
Impl.java:1935)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:1874)

        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.store(PersistenceBrokerImpl
.java:660)

        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(DelegatingPersi
stenceBroker.java:158)

        at
com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:370)

        at
com.fedex.cih.ejb.ShipmentBean.setMDEDetails(ShipmentBean.java:159)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl.setMDEDetails(ShipmentBean_6ssy
2e_EOImpl.java:202)

        at
com.fedex.cih.ejb.ShipmentBean_6ssy2e_EOImpl_WLSkel.invoke(Unknown Source)

        at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)

        at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)

        at
weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:821)

        at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)

        at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)

com.fedex.cih.jp.JPShipmentImpl.setMDEDetails(JPShipmentImpl.java:446)
2003-07-0

9 02:03:01,187 DEBUG [ExecuteThread: '8' for queue: 'default']
jp.JPShipmentImpl

 (JPShipmentImpl.java:446) - Closing broker in finally setMDEDetails() : TX



The problem happen when at the BrokerHelp



Where the class descriptor class is return 2 primary key

And the identity class return only contains one (which is correct since at
the reference mapping I'm only setting only one)




----------------------------------------------------------------------------
----


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.497 / Virus Database: 296 - Release Date: 4/7/2003


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org