Hi Jamie,
> One thing Richard added was to put the squeeze() code into the object
> itself so only one object had to be modified as we developed. He made a
> constructor that takes the sqeezed object and converts it back into the
> unsqueezed object.
Cayenne works on the assumption that each object is uniqie within
DataContext (a very nice feature that ensures object graph consistency).
As a result the solution with constructor will not work for persistent
objects, as deserialization must be able to return an object that is
already in memory (not necessarily create a new one every time). So I am
looking in the direction of "readResolve()" method supported by Java
serialization mechanism
(http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html). It
allows to substitute deserialized object with another one. This of course
will have to rely on a thread-bound DataContext. I need maybe a day or so
to implement (and document) a consistent generic approach applicable to
Tapestry. I hope this day will come soon as there is a lot of demand ;-)
But.... The reason I haven't done this yet, is that it is very easy to
build links to DataObjects as it is (see "blog-tapesry" example in
cayenne-examples download):
// put this in a DataObject subclass, and then use "id" as a link parameter:
public int getId() {
return DataObjectUtils.intPKForObject(this);
}
// put this in the page processing the link:
public void activateExternalPage(Object[] parameters, IRequestCycle
cycle) {
Blog currentBlog = null;
if (parameters != null && parameters.length > 0) {
currentBlog = (Blog) DataObjectUtils.objectForPK(
getDataContext(),
Blog.class,
parameters[0]);
}
}
Andrus
This archive was generated by hypermail 2.0.0 : Thu Mar 31 2005 - 16:55:39 EST