Re: how to remove object from context ?

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri May 12 2006 - 09:53:15 EDT

  • Next message: Gentry, Michael \(Contractor\): "RE: [OT] MacBook Pro"

    Marcin, it is still worth logging it in Jira like Mike said. Also if
    there was a downtime of Apache SVN, it was temporary, as I can get to
    it now.

    Andrus

    On May 11, 2006, at 1:19 AM, Marcin Skladaniec wrote:

    > Hello !
    >
    > On 10/05/2006, at 12:53 PM, Marcin Skladaniec wrote:
    >
    >> Hello
    >>
    >> I think someone already asked about that, but I cant find this post.
    >>
    >> I have a problem with removing objects from context. I tried :
    >>
    >> CayenneContext context = new CayenneContext(channel, true, true);
    >> CSite site = (CSite) context.newObject(CSite.class);
    >> context.getGraphManager().unregisterNode(site);
    >>
    >> but the object is still in the context (it is still in getContext
    >> ().uncommittedObjects() list ).
    >
    > I was wrong. I shall do context.getGraphManager().unregisterNode
    > (site.getObjectId()); and now it works.
    > but the second part is still a problem
    >
    >
    >>
    >> if I do
    >> CayenneContext context = new CayenneContext(channel, true, true);
    >> CSite site = (CSite) context.newObject(CSite.class);
    >> context.deleteObject(site);
    >>
    >> there is a null object in context, so I feel like I'm hitting some
    >> bug. I started to browse code (Its good to have access to
    >> repository again !).
    >>
    >> I have noticed that in ObjectContextDeleteAction there is a
    >> deleteNew method which makes a call to
    >> context.getGraphManager().unregisterNode(object.getObjectId());
    >>
    >> so I followed it futher to GraphMap and CayenneContextGraphManager
    >> and I realized that the latter does not pay attention to
    >> unregisterNode(), and therefore stateLog which keeps dirtyIds is
    >> not updated.
    >>
    >
    > I have taken a second look at CayenneContextGraphManager and
    > GraphMap. Why there are two locations where nodes are being
    > stored ? One is in GraphMap as nodes, and the second is in
    > CayenneContextGraphManager in stateLog. (It looks like the stateLog
    > is more important)
    > In the ObjectContextDeleteAction there are separate methods for
    > deleting !(NEW) and NEW objects :
    >
    >
    > private void deletePersistent(Persistent object) {
    > int oldState = object.getPersistenceState();
    > object.setPersistenceState(PersistenceState.DELETED);
    > processDeleteRules(object, oldState);
    > context.getGraphManager().nodeRemoved(object.getObjectId());
    > }
    >
    > private void deleteNew(Persistent object) {
    > object.setPersistenceState(PersistenceState.TRANSIENT);
    > processDeleteRules(object, PersistenceState.NEW);
    > context.getGraphManager().unregisterNode(object.getObjectId
    > ());
    > }
    >
    > I believe that the last line shall in both method should be the
    > same, because now those methods are affecting different lists of
    > nodes. unregisterNode has no impact on list which returned by
    > uncommitedObjects() method, so I believe this is causing the
    > phantom object to be committed. Now I have tried it, the phantom
    > object is committed to the database.
    >
    > Beside, the anonymous svn access to cayenne repository does not
    > work. Clicking on http://svn.apache.org/repos/asf/incubator/cayenne/
    > main/trunk/cayenne/ gives ' (111) Connection refused '
    >
    > Regards
    > Marcin
    >
    >
    >
    >>
    >> -------------------------->
    >> ish
    >> http://www.ish.com.au
    >> Level 1, 30 Wilson Street Newtown 2042 Australia
    >> phone +61 2 9550 5001 fax +61 2 9550 4001
    >>
    >>
    >
    > -------------------------->
    > ish
    > http://www.ish.com.au
    > Level 1, 30 Wilson Street Newtown 2042 Australia
    > phone +61 2 9550 5001 fax +61 2 9550 4001
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Fri May 12 2006 - 09:53:46 EDT