Thank you so much ! I was start reading to switch to hibernate, since there is a good documentation for wicket integration... Hopefully, with your answers I can still using Cayenne !
Arnaud 2010/4/24 Nishant Neeraj <[email protected]> > Hi Arnaud, > > Sorry, did not see this post earlier. > We stumbled on this problem, especially when playing with browser back > button. > I am not sure if de-serialization causes re-bind of the Context to > different > thread... specially when we have session level DataContext that stays alive > across the pages. > > Anyways, I did a work around for this. I wrote a LoadableDetachable type of > IModel that performs > > [CODE] > public T getObject() { > if (this.object == null) { > if (this.objectId != null) { > this.object = load(objectId); > if (this.object == null) { > throw new MyRuntimeException("Entity not found. Id: " > + this.objectId); > } > } > } > > if (this.object != null > && ((DataObject) object).getPersistenceState() == > PersistenceState.HOLLOW > && this.objectId != null) { > this.object = load(this.objectId); > } > > return this.object; > } > > [/CODE] > > > And load is something like this > > [CODE] > private T load(ObjectId objId) { > DataContext ctx = ((CayenneORMInterface) EduShareSession.get() > .getSessionORMInterface()).getDataContext(); > DataObject dobj = (DataObject) DataObjectUtils.objectForPK(ctx, > objId); > return (T) dobj; > } > [/CODE] > > This works most of the cases. > > However, I am still looking for a better solution because if you perform > DataContext.newObject(...) -- the object, when serialized without > DataContext.commitChanges() -- does not hold a permanentId (temporary > object > ID is not much help). And you can't ask Cayenne to resurrect this from > Cache > based on temporaryId. > > > Hopefully this helps. Suggestions welcome. > > - Nishant > > On Fri, Apr 23, 2010 at 12:43 AM, Arnaud Garcia <[email protected] > >wrote: > > > Hello, > > (lot of questions today ;-) > > > > I have a curious error on my site (wicket+cayenne). > > > > Cannot set object as destination of relationship toAdresse because it is > in > > a different ObjectContext > > at > > > > > org.apache.cayenne.CayenneDataObject.willConnect(CayenneDataObject.java:344) > > at > > > > > org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:298) > > > > > > > > How a cayenne object can be in a different context ? (In my understanding > a > > Context is attached to the current thread, so different ObjectContext > means > > different threads) > > > > Is it possible that the Wicket serialize/de-serialize mechanism create a > > new re-bind of the Context to another thread ?? > > there was a similar discussion 2 weeks ago: > > > > > http://cayenne.195.n3.nabble.com/Conditions-when-PersistenceState-gets-hollow-tp691334p692371.html > > > > > > thanks > > > > Arnaud > > >
