有没有办法设置 Ignite 瘦客户端类加载器?

Is there a way to set an Ignite thin Client ClassLoader?

Ignite 胖客户端提供了一种设置 class 加载程序的方法。我已经成功地使用它来避免从 Ignite 缓存中删除值时出现 class not found 异常。否则,我会与 tomcat 应用程序中的 class 加载程序发生冲突。请参阅下面的示例:

IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setClassLoader(MyClass.class.getClassLoader());
Ignite ig = Ignition.start(cfg);
IgniteCache<Integer,MyClass> myCache = ig.getOrCreateCache("MyClass");
MyClass mc = myCache.get( 0 ); //throws java.lang.ClassNotFoundException without line 2

我现在正在尝试使用不提供此方法的瘦客户端。有没有办法为瘦客户端配置 class 加载程序?或者是否有其他方法可以避免 class 在尝试反序列化对象时从 Ignite ClientCache 中删除对象时未发现异常?

ClientConfiguration cfg = new ClientConfiguration();
ClientIgnite ig = Ignition.startClient(cfg);
ClientCache<Integer,MyClass> myCache = ig.getOrCreateCache("MyClass");
MyClass mc = myCache.get( 0 ); //throws java.lang.ClassNotFoundException

仔细考虑之后,我决定尝试从 tomcat 方面解决这个问题,而不是点燃。以下是帮助我更好地理解这个问题的链接。

最终问题是 ignite classes 是由 class 加载器加载的,它是我的网络应用程序 class 加载器的父级。

  • 启动时,我的 webapp 的 class 加载器会检查其父级加载器以查找我的 键值对,找不到然后自己加载。
  • 接下来,当我使用 Ignite classes 时,webapp 的 class 会查找 它的父 class 加载器(常见的 class 加载器),发现
    parent 已经加载了 classes,并使用那个 class 加载器 点燃 classes.
  • 当 Ignite classes 试图将我的 classes 转换为二进制文件时,它 会在其父 class 加载程序中寻找 classes,而不是找到它们 并自行加载它们。
  • 当我试图从缓存中获取值时,我会得到一个 冲突,因为 Ignite 和 Tomcat 分别加载了 classes 他们自己的。

最后我只是将 ignite 罐子添加到 WEB-INF/lib,然后 ignite classes 将由 webapp class 加载程序加载,解决了整个问题。

https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html https://www.mulesoft.com/tcat/tomcat-classpath