Here is a better version that takes into account superclass behavior:
public class SerializableDO extends CayenneDataObject {
private void writeObject(ObjectOutputStream out) throws IOException {
if (persistenceState == PersistenceState.COMMITTED) {
out.writeBoolean(true);
out.writeObject(values);
} else {
out.writeBoolean(false);
}
}
private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
if (in.readBoolean()) {
this.values = (Map) in.readObject();
}
this.persistenceState = PersistenceState.TRANSIENT;
}
}
Andrus
On Nov 26, 2007, at 2:10 PM, Andrus Adamchik wrote:
> Hi Detlef,
>
> I guess the easiest way to handle this is to restore default Java
> serialization behavior, overriding CayenneDataObject context based
> deserialization. E.g. you may use the following class as a customer
> superclass of all your entity classes:
>
> public class SerializableDO extends CayenneDataObject {
>
> private void writeObject(ObjectOutputStream out) throws IOException {
> out.writeObject(values);
> out.writeObject(objectId);
> }
>
> private void readObject(ObjectInputStream in) throws IOException,
> ClassNotFoundException {
>
> this.values = (Map) in.readObject();
> this.objectId = (ObjectId) in.readObject();
> this.persistenceState = PersistenceState.TRANSIENT;
> }
> }
>
> Andrus
>
>
> On Nov 22, 2007, at 11:49 AM, Detlef Burt wrote:
>
>> Hello List,
>>
>> as you might expect, i got a small problem.
>>
>> The scenario is the following:
>>
>> I have a framework that communicates completely via OpenJMS. It has
>> a "PersistenceLayer" that can be configured to use different
>> PersistenceFrameworks. One of these is Cayenne.
>>
>> The Program flow is the following:
>> 1. Send a request to the server (in my Testcase: "get Extents of
>> Class X from Database")
>> 2. The PersistenceLayer handles the request and returns the correct
>> results from the Database in a Vector --> Up to this point,
>> everything is fine
>> 3. Send the Vector back to the Application that requested the Data.
>>
>> Now this is where my Problem is:
>> I get a Vector with the right amount of Entries and they all have
>> the right class, but all the Objects are hollow and return null for
>> every property/class field.
>>
>> I found out, that I can keep the Objects contents when I call
>> DataContext.unregisterObjects, but after reading some more posts on
>> this group, I do remember reading something about unregisterObjects
>> not being a good solution. Quoting Andrus:
>>
>> "In any event I would advise against using "unregisterObjects",
>> unless you are sure there are no remaining cached objects that
>> point to unregistered objects via a relationship."
>>
>> So my question is:
>> Is there a more elegant solution to my problem? I really would like
>> to keep all the Data from the Objects and maybe even the ObjectId
>> of the Objects to be able to more easily reference the Objects in
>> the Database.
>>
>> Thanks in Advance,
>> Detlef
>>
>>
>
>
This archive was generated by hypermail 2.0.0 : Mon Nov 26 2007 - 07:17:38 EST