The filter would run on the server side, so yes, the model class would need to
be deployed to there. Alternatively, you could use BinaryObject. Something like
this should work:
QueryCursor<Cache.Entry<String, BinaryObject>> query =
cache.withKeepBinary().query(new
ScanQuery<String, BinaryObject>(new IgniteBiPredicate<String,
BinaryObject>() {
@Override
public boolean apply(String s, BinaryObject person) {
BinaryObjectBuilder p = person.toBuilder();
System.out.println(s + " : " + person);
return (int)p.getField("age") > 22;
}
}));
(Not tested, but you get the idea.)
Regards,
Stephen
> On 13 Feb 2019, at 02:16, chengpei <[email protected]> wrote:
>
> import org.apache.ignite.Ignite;
> import org.apache.ignite.IgniteCache;
> import org.apache.ignite.Ignition;
> import org.apache.ignite.cache.CacheAtomicityMode;
> import org.apache.ignite.cache.CacheMode;
> import org.apache.ignite.cache.CacheWriteSynchronizationMode;
> import org.apache.ignite.cache.query.QueryCursor;
> import org.apache.ignite.cache.query.ScanQuery;
> import org.apache.ignite.configuration.CacheConfiguration;
> import org.apache.ignite.configuration.IgniteConfiguration;
> import org.apache.ignite.lang.IgniteBiPredicate;
>
> import javax.cache.Cache;
>
> public class QueryTest {
>
> public static Ignite ignite;
>
> public static IgniteCache<String, Person> cache;
>
> public static void main(String[] args) {
> try {
> init();
> // insertData();
> queryData();
> } catch (Exception e) {
> throw e;
> } finally {
> ignite.close();
> }
> }
>
> private static void queryData() {
> System.out.println("query data start");
> QueryCursor<Cache.Entry<String, Person>> query = cache.query(new
> ScanQuery<String, Person>(new IgniteBiPredicate<String, Person>() {
> @Override
> public boolean apply(String s, Person person) {
> System.out.println(s + " : " + person);
> return person.getAge() > 22;
> }
> }));
> for (Cache.Entry<String, Person> entry : query) {
> System.out.println("queryData() ====> key:" + entry.getKey() +
> ", value:" + entry.getValue());
> }
> System.out.println("query data end");
> }
>
> private static void insertData() {
> System.out.println("insert data start");
> Person p1 = new Person("Jack", 20);
> Person p2 = new Person("Tom", 21);
> Person p3 = new Person("Mike", 22);
> Person p4 = new Person("Luci", 23);
> Person p5 = new Person("Debug", 24);
> cache.put(p1.getName(), p1);
> cache.put(p2.getName(), p2);
> cache.put(p3.getName(), p3);
> cache.put(p4.getName(), p4);
> cache.put(p5.getName(), p5);
> System.out.println("insert data end");
> }
>
> private static void init() {
> System.out.println("init ignite cache start");
> IgniteConfiguration cfg = new IgniteConfiguration();
> cfg.setClientMode(true);
> cfg.setPeerClassLoadingEnabled(true);
>
> CacheConfiguration cardCacheCfg = new CacheConfiguration();
> cardCacheCfg.setName("Person_Cache");
> cardCacheCfg.setCacheMode(CacheMode.PARTITIONED);
>
> cardCacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
> cardCacheCfg.setBackups(2);
> cardCacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
>
> cfg.setCacheConfiguration(cardCacheCfg);
> ignite = Ignition.start(cfg);
> cache = ignite.getOrCreateCache("Person_Cache");
> System.out.println("init ignite cache end");
> }
>
> }
> class Person {
>
> private String name;
>
> private int age;
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> public int getAge() {
> return age;
> }
>
> public void setAge(int age) {
> this.age = age;
> }
>
> public Person(String name, int age) {
> this.name = name;
> this.age = age;
> }
>
> @Override
> public String toString() {
> return "Person{" +
> "name='" + name + '\'' +
> ", age=" + age +
> '}';
> }
> }
>
> <http://apache-ignite-users.70518.x6.nabble.com/file/t2304/1.png>
>
> I want the result to be
> key:Luci, value:Person{name='Luci', age=23}
> key:Debug, value:Person{name='Debug', age=24}
>
> and Do I have to put lib in ignite lib folder ?
> Thanks
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/