我正在测试HazelCast 3.1.3及其HTTP会话聚类/ WM。我的目标应用程序是JSF 2.1 / PrimeFaces应用程序,它大量使用CDI。
它有一些javax.enterprise.context.SessionScoped bean,以及许多其他东西。
我编写了一个与之匹配的简单WAR,它使用非常简单的SessionScoped Bean。我按照HC方向配置了HC / WM:http://www.hazelcast.org/docs/latest/manual/html-single/#HttpSessionClustering
注意:我没有运行嵌入式HC;而是将WM配置为已经运行的HC'服务器'实例的客户端。到目前为止,我的单个GF实例和HC服务器在同一个盒子上运行进行此测试。
这种分类工作,在WM / HC中连接并创建会话和内容。 HC Server看到并接受WM客户端连接。
然而,再一次有趣的东西(与Web应用程序中的SessionScoped对象的交互)开始发生HC / WM开始抛出ClassNotFound异常。特别是CNF的org.jboss.weld.context.conversation.ConversationIdGenerator。
我认为这是因为GF 3.1.2.2中的CDI由WELD OSGI“thing”提供,并且由更低级别的类加载器加载,该加载器“更接近”GF中的会话管理器。但是,当WM / HC过滤器(由WAR类加载器加载)访问CDI / WELD代理或包装的会话对象以对其进行序列化时 - 它无法看到WELD类(我已经验证了ConversationIdGenerator是可序列化的)。
有没有人对如何解决这个问题有任何想法?
我认为在我的WAR中提供焊接可能起作用或者在公共类加载器中使WELD可用 - 但这是次优的。
嗯......这是一个地方性问题,CDI是否由App容器作为服务提供,但会话群集是作为应用程序级面提供的? (或者这种问题会发生在WildFly /其他吗?)