Sorry I messed up the ScanQueryWithTransform.java a little bit.
This is the clean version.

Thank you.


On 7/3/20 2:19 PM, Rafael Troilo wrote:
> Hi Ilya, hey Denis,
> 
> thank you both of you for taking a look into this problem.
> 
> How would you like get the reproducing stand-alone runnable?
> 
> I attached a single file which reproduces the problem.
> 
> Do you like to have it in any other way?
> 
> 
> Some comments:
> In this issue, it does not matter if the Transformer Class is a static member 
> class or a separate class it self. Both produce the exception.
> 
> The Transformer (IgniteClosure) class works fine in a broadcast.
> 
>   // simple IgniteClosure broadcast
>   ignite.compute().broadcast(new Transformer<>(), 
> "broadcast").forEach(System.out::println);
> 
> and for a scanquery with transform from within remote job (like this 
> broadcast)
> 
>   // broadcast which return the result the scanquery transform
>   ignite.compute().broadcast(() -> {
>     return cache.query(new ScanQuery<>(), new Transformer<>()).getAll();
>   }).stream().flatMap(List::stream).forEach(System.out::println);
> 
> but does not work on the client side directly
> 
>   // does throw a ClassNotFound Exception about the Transformer Class.
>   cache.query(new ScanQuery<>(), new 
> Transformer<>()).getAll().forEach(System.out::println);
> 
> 
> Thank you.
> 
> Let me know if I can do more to help you to find the problem.
> 
> Best,
> Rafael
> 
> 
> 
> 
> On 7/2/20 5:39 PM, Ilya Kasnacheev wrote:
>> Hello!
>>
>> I would like to start with a reproducer. Rafael, can you please throw
>> together a runnable stand-alone reproducer of this issue?
>>
>> Thanks,
>>
> 

-- 
Rafael Troilo, Dipl.-Inform. (FH)
   GIScience Research Group 
  
   Heidelberg Institute for Geoinformation Technology

   rafael.tro...@uni-heidelberg.de
   http://giscience.uni-hd.de
   http://www.geog.uni-heidelberg.de/gis/heigit.html
  
   Berliner Str. 45 (Mathematikon), D-69120 Heidelberg, Germany
   fon: +49(0)6221 / 54 / 19704
import java.util.Collections;
import java.util.List;
import javax.cache.Cache.Entry;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.lang.IgniteClosure;

public class ScanQueryWithTransform {
  private static final String cacheName = "ScanQueryTransformerIssue";

  public static void main(String[] args) {
    if (args.length == 0) {
      System.out.println("missing config file argument!");
      System.exit(1);
    }

    String cfg = args[0];

    Ignition.setClientMode(true);
    try (Ignite ignite = Ignition.start(cfg)) {
      IgniteCache<Integer, String> cache = ignite.createCache(cacheName);
      for (int i = 0; i < 5; i++) {
        // fill cache with some data
        cache.put(i, Integer.toBinaryString(i));
      }

      try (QueryCursor<Entry<Integer, String>> cursor = cache.query(new ScanQuery<>(), new Transformer<>())) {
        // throws exception about ClassNotFound Transformer
        cursor.getAll();
      } catch (Exception e) {
        e.printStackTrace();
      }

      //clean up!
      ignite.destroyCache(cacheName);
    }
  }

  private static class Transformer<T> implements IgniteClosure<T, T> {
    private static final long serialVersionUID = 1L;

    @Override
    public T apply(T e) {
      return e;
    }
  }
}

Reply via email to