Andrey, you rock - that did it! thanks, -Chad
----- Original Message ----- From: "Andrey Razumovsky" <razumovsky.and...@gmail.com> To: user@cayenne.apache.org Sent: Wednesday, January 7, 2009 9:58:02 AM GMT -07:00 US/Canada Mountain Subject: Re: A little help w/ session state please I think DataContext.invalidateObjects(...) method was present in 2.0. Still, I'd recommend to update to Cay3 anyways. BTW this message is already on Cayenne list Regards, Andrey 2009/1/7 John Armstrong <siber...@gmail.com> > Check with Andrus on the Cayenne list. They are usually pretty good > about helping find the answer (rather then just saying 'Use 3.0!') > > Good luck, glad to see others are cayenning with Wicket! > > J > > On Wed, Jan 7, 2009 at 7:48 AM, Chad Smith <chadksmi...@gmail.com> wrote: > > John, > > I don't think you are missing the point and that looked promising. But > it looks like RefreshQuery is a 3.0 bean and not available in 2.0.4. > > > > -Chad > > > > ----- Original Message ----- > > From: "John Armstrong" <siber...@gmail.com> > > To: user@cayenne.apache.org > > Sent: Wednesday, January 7, 2009 8:33:08 AM GMT -07:00 US/Canada Mountain > > Subject: Re: A little help w/ session state please > > > > This I think may be more of a cayenne problem. You have to reload the > > object to destroy the cayenne cache using something like RefreshQuery. > > > > Thats what I have to do in many cases. Like this: > > > > context.deleteObject(theFeed); > > context.commitChanges(); > > context.commitChangesToParent(); > > context.performQuery(new RefreshQuery(theFeed)); > > > > I may be missing the point entirely, sorry :) > > John- > > > > On Wed, Jan 7, 2009 at 6:04 AM, Chad Smith <chadksmi...@gmail.com> > wrote: > >> I have a web app that uses Cayenne 2.0.4 w/ Spring and it uses a servlet > filter to manage the data context ... > >> > >> Request init code > >> -------------------------------- > >> HttpSession session = > ((HttpServletRequest)servletRequest).getSession(true); > >> DataContext dataContext = ServletUtil.getSessionContext(session); > >> DataContext.bindThreadDataContext(dataContext); > >> > >> > >> Request destroy code > >> -------------------------------- > >> DataContext dataContext = DataContext.getThreadDataContext(); > >> if (dataContext.hasChanges()) { > >> dataContext.rollbackChanges(); > >> } > >> DataContext.bindThreadDataContext(null); > >> > >> ... I also have a parent table and child table in which the child table > has a circular reference to itself > >> > >> parent table: Forum > >> > >> forum.forum_id > >> > >> child table: forum_thread > >> > >> forum_thread.forum_id > >> forum_thread.thread_id > >> forum_thread.parent_thread_id (the circular reference) > >> > >> ... here is the cayenne mapping xml for the relationships ... > >> > >> <db-relationship name="forumToThread" source="forum" > target="forum_thread" toMany="true"> > >> <db-attribute-pair source="forum_id" target="forum_id"/> > >> </db-relationship> > >> <db-relationship name="subThreadToThread" source="forum_thread" > target="forum_thread" toMany="false"> > >> <db-attribute-pair source="parent_thread_id" target="thread_id"/> > >> </db-relationship> > >> <db-relationship name="threadToForum" source="forum_thread" > target="forum" toMany="false"> > >> <db-attribute-pair source="forum_id" target="forum_id"/> > >> </db-relationship> > >> <db-relationship name="threadToSubThread" source="forum_thread" > target="forum_thread" toMany="true"> > >> <db-attribute-pair source="thread_id" target="parent_thread_id"/> > >> </db-relationship> > >> <obj-relationship name="forumToThread" source="Forum" target="Thread" > deleteRule="Cascade" db-relationship-path="forumToThread"/> > >> <obj-relationship name="subThreadToThread" source="Thread" > target="Thread" db-relationship-path="subThreadToThread"/> > >> <obj-relationship name="threadToForum" source="Thread" target="Forum" > db-relationship-path="threadToForum"/> > >> <obj-relationship name="threadToSubThread" source="Thread" > target="Thread" deleteRule="Cascade" > db-relationship-path="threadToSubThread"/> > >> > >> ... here is the code I'm using to delete a thread ... > >> > >> public boolean deleteThread(int threadId) throws DataAccessException > { > >> // NOTE: transactions are auto commit unless otherwise specified! > >> Thread thread = loadThread(threadId); > >> > >> // remove any parent association > >> if (thread.getSubThreadToThread() != null) { > >> Thread parentThread = thread.getSubThreadToThread(); > >> parentThread.removeFromThreadToSubThread(thread); > >> } > >> > >> // remove forum association > >> Forum forum = thread.getThreadToForum(); > >> forum.removeFromForumToThread(thread); > >> > >> super.delete(thread); > >> return true; > >> } > >> > >> ... so here is the problem: I setup the following data > >> > >> Forum record which has 3 top level thread records. Lets say thread 2 > has several children and several grand children. When I delete one of > thread 2's children it does the database deletes perfectly (cascade deletes > of the correct grandchildren), however, the gui continues to show the grand > children but the child record (that was deleted) is gone. Here is the SQL > and the data context looks clean before and after processing .... > >> > >> CayenneDao >>> --------------- Cayenne Context: 2009-01-07 06:49:40 > ---------------- > >> - hasChanges = false | isTransactionEventsEnabled = false | > isUsingSharedSnapshotCache = true | isValidatingObjectsOnCommit = true > >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:423) - --- will run 1 > query. > >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:377) - --- transaction > started. > >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:300) - DELETE FROM > gtools.forum_thread WHERE thread_id = ? > >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:322) - [bind: 228] > >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row. > >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:322) - [bind: 227] > >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row. > >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:322) - [bind: 226] > >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row. > >> 2009-01-07 06:49:41,015 INFO (QueryLogger.java:384) - +++ transaction > committed. > >> CayenneDao >>> --------------- Cayenne Context: 2009-01-07 06:49:41 > ---------------- > >> - hasChanges = false | isTransactionEventsEnabled = false | > isUsingSharedSnapshotCache = true | isValidatingObjectsOnCommit = true > >> > >> ... no matter where I go w/in the application the data (grand children) > seems to stick in the cache but if I log off and back on they are now gone > (no longer in the object cache). What am I doing wrong here? I know that > is a lot to wade through but I would greatly appreciate any help on > diagnosing the problem. > >> > >> Thanks in advance. > >> Chad > >> > > >