Re: Change tracking API in Cayenne

John Huss <[email protected]>
Newsgroups gmane.comp.java.cayenne.devel
Message-ID <CAOUwSGtxwNXcWwAPSKbcEnoRD43rY5MpTAwCdpBEtGRZDu-U6Q@mail.gmail.com>
Providing a "minimal viable product" type of implementation of this as a
starting point for users to customize or copy would probably be helpful.

On Fri, Oct 11, 2019 at 9:35 AM Andrus Adamchik <[email protected]>
wrote:

> So you'd need to consume GraphDiff, you need to implement a custom
> GraphChangeHandler, and then do "diff.apply(myChangeHandler)" to aggregate
> / filter the changes you care about. All the references to "nodeId" in
> GraphChangeHandler can be cast to ObjectId, so you can tie it back to the
> actual objects. So while it is not user-friendly, I think you can turn it
> to useful info in a fairly straightforward manner.
>
> Andrus
>
>
> > On Oct 11, 2019, at 10:24 AM, John Huss <[email protected]> wrote:
> >
> > I haven't worked with the GraphDiff API much, but it's not super easy to
> > turn a GraphDiff into something immediately useful.
> >
> > When I've needed things like this I've usually constructed a
> > List<Map<String, Object>> with a row for each changed object and a map
> with
> > attribute/relationship key to the new value. Looking at
> > NodePropertyChangeOperation - it has the key and the old and new value,
> but
> > the API doesn't have any way of extracting that information that I see.
> >
> > Most likely I just don't understand how to use this correctly, but I'm
> > guessing I wouldn't be the only one.
> >
> > On Fri, Oct 11, 2019 at 5:36 AM Andrus Adamchik <[email protected]>
> > wrote:
> >
> >> Was just answering Cayenne change tracking question on StackOverlow [1],
> >> and realized that the only user-friendly API that allows to check for
> >> individual changes is "cayenne-commitlog" that only works during commit.
> >> All the pre-commit APIs are internal and require lots of hoop jumping. I
> >> think we can address that on the cheap in 4.2 by defining a method like
> >> this in GraphManager.java:
> >>
> >>  GraphDiff getChanges();
> >>
> >> We already have such method implemented in ObjectStore, so there's
> really
> >> no effort and an immediate benefit. Or take it a step further and
> >> additionally implement filtering changes per object:
> >>
> >>  GraphDiff getChanges(Persistent)
> >>
> >> Thoughts?
> >>
> >> Andrus
> >>
> >> [1]
> >>
> https://stackoverflow.com/questions/58318730/what-is-the-current-best-method-of-getting-the-changes-to-an-object-hierarchy-in
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.