[ https://issues.apache.org/jira/browse/IGNITE-3935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16070384#comment-16070384 ]
ASF GitHub Bot commented on IGNITE-3935: ---------------------------------------- GitHub user Grigory2000 opened a pull request: https://github.com/apache/ignite/pull/2221 IGNITE-3935 Added test for Ignite-3935 issue. You can merge this pull request into a Git repository by running: $ git pull https://github.com/Grigory2000/ignite Ignite-3935 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/ignite/pull/2221.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2221 ---- commit 66ede2de4fafbc9ae63abaac8623d4fb89f267f9 Author: Grigory <krasilni...@phystech.edu> Date: 2017-06-30T14:32:13Z StreamingExample for reproducing the issue added commit 7e06da526adb96bf09a094107118041654ca6ed7 Author: Grigory <krasilni...@phystech.edu> Date: 2017-06-30T16:26:11Z Added self test/testsuite according to other tests ---- > ClassLoaders are not switched during object deserialization > ----------------------------------------------------------- > > Key: IGNITE-3935 > URL: https://issues.apache.org/jira/browse/IGNITE-3935 > Project: Ignite > Issue Type: Bug > Components: binary > Affects Versions: 1.6 > Reporter: Denis Magda > > If an object is being deserialized with ClassLoader A then this ClassLoader A > will be used for the deserialization of the whole object's state, i.e., > including all its fields that can be custom objects loaded by ClassLoader B. > In a basic scenario we can have an object of some Ignite class that is > presented in the classpath. That Ignite class may enclose an object that is > loaded by peer-class-loading class loader. The deserialization will fail > because Ignite won't switch to the peer-class-loading loader when it's needed. > To reproduce the issue do the following: > 1. Start a remote ignite node using {{./ignite.sh > ../examples/config/example-ignite.xml}} > 2. Run the code below > {code} > public class StreamingExample {` > public static class StreamingExampleCacheEntryProcessor implements > CacheEntryProcessor<String, Long, Object> { > @Override > public Object process(MutableEntry<String, Long> e, Object... arg) throws > EntryProcessorException { > Long val = e.getValue(); > e.setValue(val == null ? 1L : val + 1); > return null; > } > } > public static void main(String[] args) throws IgniteException, IOException { > Ignition.setClientMode(true); > try (Ignite ignite = > Ignition.start("examples/config/example-ignite.xml")) { > IgniteCache<String, Long> stmCache = > ignite.getOrCreateCache("mycache"); > try (IgniteDataStreamer<String, Long> stmr = > ignite.dataStreamer(stmCache.getName())) { > stmr.allowOverwrite(true); > stmr.receiver(StreamTransformer.from(new > StreamingExampleCacheEntryProcessor())); > stmr.addData("word", 1L); > System.out.println("Finished"); > } > } > } > {code} > However if to modify this code to the following everything will work fine > {code} > public class StreamingExample { > public static class StreamingExampleCacheEntryProcessor extends > StreamTransformer<String, Long> { > @Override > public Object process(MutableEntry<String, Long> e, Object... arg) > throws EntryProcessorException { > System.out.println("Executed!"); > Long val = e.getValue(); > e.setValue(val == null ? 1L : val + 1); > return null; > } > } > public static void main(String[] args) throws IgniteException, > IOException { > Ignition.setClientMode(true); > try (Ignite ignite = > Ignition.start("examples/config/example-ignite.xml")) { > IgniteCache<String, Long> stmCache = > ignite.getOrCreateCache("mycache"); > try (IgniteDataStreamer<String, Long> stmr = > ignite.dataStreamer(stmCache.getName())) { > stmr.allowOverwrite(true); > stmr.receiver(new StreamingExampleCacheEntryProcessor()); > stmr.addData("word", 1L); > System.out.println("Finished"); > } > } > } > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)