Hi, You should not serialize cache instances. Actually your cache is already created on all nodes of your cluster and you can obtain it using ignite.cache(<name>) or ignite.getOrCreateCache(<name>) methods.
I assume that you try to start Ignite instance with default name from your ComplexObjectProcessor but Ignite is started already. You can declare Ignite reference in ComplexObjectProcessor and annotate it with @IgniteInstanceResource. When your processor will be deserialized on remote node Ignite instance will be injected automatically. It looks like this: public class ComplexObjectProcessor { @IgniteInstanceResource private Ignite ignite ... } Make sure that your ComplexObjectProcessor is regular class or inner static class. Non-static inner class instances have reference to enclosing class that will be serialized with inner class. On Thu, Nov 26, 2015 at 9:08 PM, alpha centauri <helium...@hotmail.com> wrote: > Hello, > > I'm a new Apache Ignite User. I'm trying to prototype a simple use case : > 1. create two caches > 2. read strings from a file and put them in the first cache > 3. compute strings into complex objects put the complex objects into > second cache > > My code looks like this : > > // Part 1 > final IgniteCache<Integer, String> cacheString = > ignite.getOrCreateCache("somestrings"); > final IgniteCache<String, SomeObjects> cache = > ignite.getOrCreateCache("someobjects"); > > // Part 2 > try (IgniteDataStreamer<Integer, String> stmr = > ignite.dataStreamer(cacheString.getName())) { > stmr.allowOverwrite(true); > try (BufferedReader br = Files.newReader(file, > StandardCharsets.UTF_8)) { > for (String line; (line = br.readLine()) != null; ) { > if (line !=null && line.length() > 0) { > stmr.addData(index, line); > } > } > > } > } > > // Part 3 is where I struggle and need help > IgniteCompute compute = ignite.compute(); > > for (int i = 0; i < cacheString.size(); i++) { > final int key = i; > compute.affinityRun(cacheString.getName(), key, new > ComplexObjectProcessor(cache, cacheString.get(key))); > } > > The issue is that the ComplexObjectProcessor is serialized to my grid > nodes and if I put the destination cache, it will crash because the cache > cannot be serialized. If I initialize the cache from my > ComplexObjectProcessor, it will complain about the fact that Ignite has > already been instanciated outside. ComplexObjectProcessor has a lot of > code so an inside/inline class is not an option. > The cacheString contains 100Millions lines so I really want to split the > complex object processor with compute tasks. > > Any solution? Or code sample would greatly help. > > Thks ahead, > AC > > -- Andrey Gura GridGain Systems, Inc. www.gridgain.com