[
https://issues.apache.org/jira/browse/IGNITE-425?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16080420#comment-16080420
]
Nikolay Izhikov edited comment on IGNITE-425 at 7/10/17 2:41 PM:
-----------------------------------------------------------------
# Other parts of Ignite \[1] use IgniteClosure \[2] as transformer. I think we
can reuse interface. Thoughts?
# Do we need to provide backward compatibility for a ContinuousQuery as it a
public API?
We will broke all client code that using ContinuousQuery if simply add one more
generic parameter(ContinuousQuery<K, V, T>)
# Which way of implementation is preferable?
## First way to implement feature is create GenericContinuousQuery.
Internal code will use new GenericContinuousQuery but all client code that
using ContinuousQuery still be valid(see first code example)
## Second way ContinuousQueryWIthTransformer extends ContinuousQuery.
Internal code has to check which instance it has when execute some logic(see
second code example)
{code:java}
public final class GenericContinuousQuery<K, V, T> extends Query<Cacne.Entry<K,
V>> {
/* new method to add */
public GenericContinuousQuery<K, V, T>
setRemoteTransformerFactory(Factory<? extends ContinuousQueryTransformer<K, V,
T>> factory) { ..}
//other new methods
}
public final class ContinuousQuery<K, V> extends GenericContinuousQuery<K, V,
V> {
public ContinuousQuery() {
setRemoteTransformerFactory(new Factory<IgniteClosure<V, V>> {
public IgniteClosure<V, V> create() {
return new IgniteClosure<V, V> {
public V apply(V e) { return e; }
}
}
});
}
}
{code}
{code:java}
public final class ContinuousQueryWithTransformer<K, V, T> extends
ContinuousQuery<K, V> {
/* new method to add */
public GenericContinuousQuery<K, V, T>
setRemoteTransformerFactory(Factory<? extends ContinuousQueryTransformer<K, V,
T>> factory) { ..}
//other new methods
}
{code}
\[1]
https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/IgniteCache.html#query(org.apache.ignite.cache.query.Query,%20org.apache.ignite.lang.IgniteClosure)
\[2]
https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/lang/IgniteClosure.html
was (Author: nizhikov):
# Other parts of Ignite \[1] use IgniteClosure \[2] as transformer. I think we
can reuse interface. Thoughts?
# Do we need to provide backward compatibility for a ContinuousQuery as it a
public API?
We will broke all client code that using ContinuousQuery if simply add one more
generic parameter(ContinuousQuery<K, V, T>)
# Which way of implementation is preferable?
## First way to implement feature is create GenericContinuousQuery.
Internal code will use new GenericContinuousQuery but all client code that
using ContinuousQuery still be valid(see first code example)
## Second way ContinuousQueryWIthTransformer extends ContinuousQuery.
Internal code has to check which instance it has when execute some logic
{code:java}
public final class GenericContinuousQuery<K, V, T> extends Query<Cacne.Entry<K,
V>> {
/* new method to add */
public GenericContinuousQuery<K, V, T>
setRemoteTransformerFactory(Factory<? extends ContinuousQueryTransformer<K, V,
T>> factory) { ..}
//other new methods
}
public final class ContinuousQuery<K, V> extends GenericContinuousQuery<K, V,
V> {
public ContinuousQuery() {
setRemoteTransformerFactory(new Factory<IgniteClosure<V, V>> {
public IgniteClosure<V, V> create() {
return new IgniteClosure<V, V> {
public V apply(V e) { return e; }
}
}
});
}
}
{code}
{code:java}
public final class ContinuousQueryWithTransformer<K, V, T> extends
ContinuousQuery<K, V> {
/* new method to add */
public GenericContinuousQuery<K, V, T>
setRemoteTransformerFactory(Factory<? extends ContinuousQueryTransformer<K, V,
T>> factory) { ..}
//other new methods
}
{code}
\[1]
https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/IgniteCache.html#query(org.apache.ignite.cache.query.Query,%20org.apache.ignite.lang.IgniteClosure)
\[2]
https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/lang/IgniteClosure.html
> Introduce transformers for continuous queries
> ---------------------------------------------
>
> Key: IGNITE-425
> URL: https://issues.apache.org/jira/browse/IGNITE-425
> Project: Ignite
> Issue Type: Sub-task
> Components: cache
> Reporter: Yakov Zhdanov
> Assignee: Nikolay Izhikov
>
> Currently if updated entry passes the filter, it is sent to node initiated
> the query entirely. It would be good to provide user with the ability to
> transform entry and, for example, select only fields that are important. This
> may bring huge economy to traffic and lower GC pressure as well.
> Possible signatures will be:
> {noformat}
> public final class ContinuousQuery<K, V, T> {..} // T is a type transformer
> transforms to
> public ContinuousQuery<K, V, T> setLocalListener(Listener<T> locLsnr) {..} //
> Probably, we will have to introduce new listener type, since user may want to
> wipe out key as well.
> /* new method to add */
> public ContinuousQuery<K, V, T> setRemoteTransformerFactory(Factory<? extends
> ContinuousQueryTransformer<K, V, T>> factory) { ..}
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)