In fact one of the reasons for this refactoring was to avoid an incorrect implication that filters do have a lifecycle instead of being simple singletons within the Cayenne stack.
Andrus > On Jul 27, 2018, at 11:56 AM, Nikita Timofeev <ntimof...@objectstyle.com> > wrote: > > Yeah, the simple version of fix is this: > > private ThreadLocal<int[]> counter = new ThreadLocal<int[]>(); > > Filters don't have any complex lifecycle, so should be no problem to > init everything upfront. > > On Thu, Jul 26, 2018 at 11:03 AM, D Tim Cummings <t...@triptera.com.au> wrote: >> I see that 4.1.M2 has deprecated DataChannelFilter. Apparently we should use >> either DataChannelQueryFilter or DataChannelSyncFilter. >> >> I am following the example on >> https://cayenne.apache.org/docs/4.1/cayenne-guide/#lifecycle-events which >> still refers to DataChannelFilter. I would use DataChannelSyncFilter in this >> example but DataChannelSyncFilter does not have an init() method to override >> so would I initialise counter where it gets declared? >> >> Here is the code from the example. >> >> public class CommittedObjectCounter implements DataChannelFilter { >> >> private ThreadLocal<int[]> counter; >> >> @Override >> public void init(DataChannel channel) { >> counter = new ThreadLocal<int[]>(); >> } >> >> @Override >> public QueryResponse onQuery(ObjectContext originatingContext, Query >> query, DataChannelFilterChain filterChain) { >> return filterChain.onQuery(originatingContext, query); >> } >> >> @Override >> public GraphDiff onSync(ObjectContext originatingContext, GraphDiff >> changes, int syncType, >> DataChannelFilterChain filterChain) { >> >> // init the counter for the current commit >> counter.set(new int[1]); >> >> try { >> return filterChain.onSync(originatingContext, changes, >> syncType); >> } finally { >> >> // process aggregated result and release the counter >> System.out.println("Committed " + counter.get()[0] + " >> object(s)"); >> counter.set(null); >> } >> } >> >> @PostPersist(entityAnnotations = Tag.class) >> @PostUpdate(entityAnnotations = Tag.class) >> @PostRemove(entityAnnotations = Tag.class) >> void afterCommit(Persistent object) { >> counter.get()[0]++; >> } >> } >> >> >> >> >> Regards >> >> Tim > > > > -- > Best regards, > Nikita Timofeev