cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Hollow Objects after sending them via JMS
Date Mon, 26 Nov 2007 12:17:05 GMT
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
>>
>>
>
>


Mime
View raw message