I'm now using incubator/cayenne/main/branches/STABLE-1.2.

One odd problem I'm hitting is serializing a DataContext created with
DataContext.createDataContext().

In my testing, I submit a web request that creates a new object,
submit a web request which creates another set of new objects and
assign it to relationships with my first new object, then submit a web
request which deletes the set of new objects.    At this point,
serialization writeObject fails on one of my internal assertions,
apparently because the deleted object is still in the context.

Here's what the summarized stack trace looks like (full trace below):

8     Fee(BaseDataObjectImpl).writeObject(ObjectOutputStream) line: 95
7     HashMap.writeObject(ObjectOutputStream) line: 978
6     FeeCycle(CayenneDataObject).writeObject(ObjectOutputStream) line: 497
5     LinkedList.writeObject(ObjectOutputStream) line: 685
4     HashMap.writeObject(ObjectOutputStream) line: 978
3     FeeCycleType(CayenneDataObject).writeObject(ObjectOutputStream) line: 497
2     HashMap.writeObject(ObjectOutputStream) line: 978
1     DataContext.writeObject(ObjectOutputStream) line: 1740


Fee in 8  and FeeCycle in 6 are transient objects -- no datacontext.
FeeCycleType in 3 is a committed object.   It's a mystery to me how
FeeCycle in 6 is being picked up by the writeObject method chain.

My thoughts are that FeeCycle must be referenced in the hashmap at 4
for the FeeCycleType at 3.

The hashmap at 4 contains:

name=Monthly
[EMAIL PROTECTED]

and the ToManyList contains:

value= ToManyList  (id=614)
        addedToUnresolved= null
        objectList= ArrayList  (id=621)
                elementData= Object[10]  (id=655)
                modCount= 0
                size= 0
        relationship= "feeCycleList"
        removedFromUnresolved= null
        source= FeeCycleType  (id=400)

So what I'm at a loss to determine is how I get from the Hashmap in 4
to the LinkedList in 5, which is what contains my transient deleted
object (and related deleted objects).

The LinkedList in 5 contains:

this= LinkedList  (id=394)
        header= LinkedList$Entry  (id=641)
                element= null
                next= LinkedList$Entry  (id=673)
                        element= FeeCycle  (id=387)
                                isInTemporaryDataContext= true
                                objectContext= null
                                objectId= null
                                persistenceState= 1
                                snapshotVersion= 0
                                values= HashMap  (id=375)
                        next= LinkedList$Entry  (id=641)
                        previous= LinkedList$Entry  (id=641)
                previous= LinkedList$Entry  (id=673)
        modCount= 1
        size= 1

The writeObject code for HashMap seems straight-forward, and we're
supposedly writing out a Map.Entry e getValue() result (debugger won't
show me what local variables are set to, but that's the line that's
showing up in my source code).

It seems like this linked list must be part of the serialization of
ToManyList (which does contain two linked lists), but looking at the
source for ToManyList, I don't see anything that matches up with what
I'd expect.

It looks like it must be serializing either addedToUnresolved or
removedFromUnresolved as these are the LinkedLists, but both of these
are null.

So....   Any ideas what I can do to try to track this down more?

=================
Possibly other relevent information:

I assume that 2 is writing out the hashmap of the ObjectStore, which
contains these 13 items.   There's no Fee reference here, nor are
there any references to non-committed FeeCycles.

<ObjectId:Contact, TEMP:000002574DF30161>={<ObjectId:Contact,
TEMP:000002574DF30161>; new; [phoneList=>(..); addressList=>(..);
contactNameList=>(..); tdWorkList=>(..); emailList=>(..);
primaryContactName=>{<ObjectId:ContactName, TEMP:000003574DF30161>}]}
<ObjectId:ContactName, TEMP:000003574DF30161>={<ObjectId:ContactName,
TEMP:000003574DF30161>; new; [allContactList=>(..);
primaryContactList=>(..)]}
<ObjectId:FeeCycleType,
FEE_CYCLE_TYPE_ID=100>={<ObjectId:FeeCycleType,
FEE_CYCLE_TYPE_ID=100>; modified; [feeCycleList=>(..); name=>None]}
<ObjectId:MonthPayableType,
MONTH_PAYABLE_TYPE_ID=113>={<ObjectId:MonthPayableType,
MONTH_PAYABLE_TYPE_ID=113>; modified; [feeCycleList=>(..);
name=>Monthly]}
<ObjectId:LegalParcel, TEMP:000006574DF30161>={<ObjectId:LegalParcel,
TEMP:000006574DF30161>; new; [meridianType=>{<ObjectId:MeridianType,
MERIDIAN_TYPE_ID=100>}; authorizationDocumentList=>(..);
parcel=>{<ObjectId:Parcel, TEMP:000007574DF30161>}]}
<ObjectId:ContactName, TEMP:000005574DF30161>={<ObjectId:ContactName,
TEMP:000005574DF30161>; new; [allContactList=>(..); fullName=>GVEA;
primaryContactList=>(..)]}
<ObjectId:MeridianType, MERIDIAN_TYPE_ID=100>={<ObjectId:MeridianType,
MERIDIAN_TYPE_ID=100>; modified; [name=>Fairbanks;
legalParcelList=>(..)]}
<ObjectId:LotType, LOT_TYPE_ID=100>={<ObjectId:LotType,
LOT_TYPE_ID=100>; modified; [parcelList=>(..); name=>Lot]}
<ObjectId:AuthorizationDocument,
TEMP:000001574DF30161>={<ObjectId:AuthorizationDocument,
TEMP:000001574DF30161>; new;
[dependentEasementDocument=>{<ObjectId:EasementDocument,
TEMP:000000574DF30161>}; recurringFeeCycle=>null;
authorizationDocumentGroupList=>(..); initialFeeCycle=>null;
oldWorkOrderList=>(..); workList=>(..); legalParcelList=>(..)]}
<ObjectId:Parcel, TEMP:000007574DF30161>={<ObjectId:Parcel,
TEMP:000007574DF30161>; new; [legalParcel=>{<ObjectId:LegalParcel,
TEMP:000006574DF30161>}; lotType=>{<ObjectId:LotType,
LOT_TYPE_ID=100>}; tdWorkList=>(..)]}
<ObjectId:EasementDocument,
TEMP:000000574DF30161>={<ObjectId:EasementDocument,
TEMP:000000574DF30161>; new; [grantorList=>(..);
authorizationDocument=>{<ObjectId:AuthorizationDocument,
TEMP:000001574DF30161>}; granteeList=>(..)]}
<ObjectId:FeeCycleType,
FEE_CYCLE_TYPE_ID=101>={<ObjectId:FeeCycleType,
FEE_CYCLE_TYPE_ID=101>; modified; [feeCycleList=>(..); name=>Monthly]}
<ObjectId:Contact, TEMP:000004574DF30161>={<ObjectId:Contact,
TEMP:000004574DF30161>; new; [phoneList=>(..); addressList=>(..);
contactNameList=>(..); tdWorkList=>(..); emailList=>(..);
primaryContactName=>{<ObjectId:ContactName, TEMP:000005574DF30161>}]}

=================

Thread [SocketListener0-0] (Suspended (breakpoint at line 95 in
BaseDataObjectImpl))
        Fee(BaseDataObjectImpl).writeObject(ObjectOutputStream) line: 95
        GeneratedMethodAccessor171.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        HashMap.writeObject(ObjectOutputStream) line: 978
        GeneratedMethodAccessor75.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        FeeCycle(CayenneDataObject).writeObject(ObjectOutputStream) line: 497
        GeneratedMethodAccessor170.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        LinkedList.writeObject(ObjectOutputStream) line: 685
        GeneratedMethodAccessor162.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.defaultWriteFields(Object, ObjectStreamClass) line: 
1332
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1304
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        HashMap.writeObject(ObjectOutputStream) line: 978
        GeneratedMethodAccessor75.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        FeeCycleType(CayenneDataObject).writeObject(ObjectOutputStream) line: 
497
        GeneratedMethodAccessor170.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.writeObject(Object) line: 278
        HashMap.writeObject(ObjectOutputStream) line: 978
        GeneratedMethodAccessor75.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
        Method.invoke(Object, Object[]) line: 324
        ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: 
809
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1296
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.defaultWriteFields(Object, ObjectStreamClass) line: 
1332
        ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: 1304
        ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass,
boolean) line: 1247
        ObjectOutputStream.writeObject0(Object, boolean) line: 1052
        ObjectOutputStream.defaultWriteFields(Object, ObjectStreamClass) line: 
1332
        ObjectOutputStream.defaultWriteObject() line: 367
        DataContext.writeObject(ObjectOutputStream) line: 1740

Reply via email to