java - 无法配置 Ignite Web session 集群

标签 java ignite

我已经集成了最新的 ignite 来进行缓存和 Web session 集群...在 session 缓存时我遇到了错误

- Failed to update web session: null
org.apache.jasper.JasperException: class org.apache.ignite.IgniteException: class org.apache.ignite.IgniteCheckedException: com.bizmatics.prognocis.view.MenuHistoryView
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:604)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.ignite.cache.websession.WebSessionFilter.doFilterV2(WebSessionFilter.java:562)
    at org.apache.ignite.cache.websession.WebSessionFilter.doFilterDispatch(WebSessionFilter.java:407)
    at org.apache.ignite.cache.websession.WebSessionFilter.doFilter(WebSessionFilter.java:383)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.bizmatics.common.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:169)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:394)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: class org.apache.ignite.IgniteException: class org.apache.ignite.IgniteCheckedException: com.bizmatics.prognocis.view.MenuHistoryView
    at org.apache.ignite.cache.websession.WebSessionV2.getAttribute(WebSessionV2.java:209)
    at org.apache.jsp.scrBannMenu_jsp._jspService(scrBannMenu_jsp.java:1362)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    ... 33 more
Caused by: java.io.IOException: class org.apache.ignite.IgniteCheckedException: com.bizmatics.prognocis.view.MenuHistoryView
    at org.apache.ignite.cache.websession.WebSessionV2.unmarshal(WebSessionV2.java:345)
    at org.apache.ignite.cache.websession.WebSessionV2.getAttribute(WebSessionV2.java:206)
    ... 37 more
Caused by: class org.apache.ignite.IgniteCheckedException: com.bizmatics.prognocis.view.MenuHistoryView
    at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10174)
    at org.apache.ignite.cache.websession.WebSessionV2.unmarshal(WebSessionV2.java:342)
    ... 38 more
Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException: com.bizmatics.prognocis.view.MenuHistoryView
    at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1758)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1717)
    at org.apache.ignite.internal.binary.BinaryUtils.doReadObject(BinaryUtils.java:1778)
    at org.apache.ignite.internal.binary.BinaryUtils.deserializeOrUnmarshal(BinaryUtils.java:2141)
    at org.apache.ignite.internal.binary.BinaryUtils.doReadCollection(BinaryUtils.java:2072)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1917)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1717)
    at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:313)
    at org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:102)
    at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:82)
    at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10168)
    ... 39 more
Caused by: java.lang.ClassNotFoundException: com.bizmatics.prognocis.view.MenuHistoryView
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:374)
    at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8775)
    at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:349)
    at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:698)
    ... 50 more

客户端配置

Web.xml

 <listener>
            <listener-class>org.apache.ignite.startup.servlet.ServletContextListenerStartup</listener-class>
        </listener>

         <filter>
           <filter-name>IgniteWebSessionsFilter</filter-name>
           <filter-class>org.apache.ignite.cache.websession.WebSessionFilter</filter-class>
        </filter>

        <!-- You can also specify a custom URL pattern. -->
         <filter-mapping>
           <filter-name>IgniteWebSessionsFilter</filter-name>
           <url-pattern>*</url-pattern>
        </filter-mapping>

        <!-- Specify Ignite configuration (relative to META-INF folder or Ignite_HOME). -->
         <context-param>
           <param-name>IgniteConfigurationFilePath</param-name>
           <param-value>../WEB-INF/default-config.xml</param-value>
        </context-param>

        <!-- Specify the name of Ignite cach`e for web sessions. -->
         <context-param>
           <param-name>IgniteWebSessionsCacheName</param-name>
           <param-value>session-cache</param-value>
         </context-param>

默认配置.xml

<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="clientMode" value="true"/>
    <property name="peerClassLoadingEnabled" value="true"/>
     <!--<property name="marshaller">
            <bean class="org.apache.ignite.marshaller.jdk.JdkMarshaller"/>
    </property>-->
    <property name="discoverySpi">
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
         <property name="ipFinder">
            <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
             <property name="addresses">
               <list>

                <value>10.2.0.224:47500..47509</value>

               </list>
             </property>
            </bean>
         </property>
     </bean>
   </property>
        <property name="cacheConfiguration">
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="session-cache"/>
                <property name="cacheMode" value="PARTITIONED"/>

                <property name="onheapCacheEnabled" value="true"/>

                <property name="evictionPolicy">
                <!-- LRU eviction policy. -->
                <bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">
                    <!-- Set the maximum cache size to 1 million (default is 100,000). -->
                  <property name="maxSize" value="1000000"/>
                </bean>
              </property>

            </bean>

        </property>

  </bean>

Java 源代码:

IgniteConfiguration igniteCfg = new IgniteConfiguration()
                                            .setCacheConfiguration(new CacheConfiguration<String, String>()
                                            .setCacheMode(CacheMode.PARTITIONED)
                                            .setOnheapCacheEnabled(true)
                                            .setAtomicityMode(CacheAtomicityMode.ATOMIC)
                                            .setName("Cache")
                                            .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, asTimeout)))
                ).setClientMode(true)
                 .setMetricsLogFrequency(0).setPeerClassLoadingEnabled(true);


                DataStorageConfiguration storageCfg = new DataStorageConfiguration();
                storageCfg.getDefaultDataRegionConfiguration().setInitialSize(512L * 1024 * 1024).setMaxSize(2L * 1024 * 1024 * 1024);

                igniteCfg.setDataStorageConfiguration(storageCfg);
                Ignite ignite = Ignition.getOrStart(igniteCfg);

                Cache = ignite.getOrCreateCache("Cache")

;

服务器配置:

默认 XML:

bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="workDirectory" value="D:/apache-ignite-2.7.6-bin/work" />
    <property name="peerClassLoadingEnabled" value="true"/>

    <property name="discoverySpi">
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
         <property name="ipFinder">
            <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
             <property name="addresses">
               <list>

                <value>10.2.0.224:47500..47509</value>
                <!--<value>10.2.1.11:47500..47509</value>
                <value>10.10.17.3:47500..47509</value>-->
               </list>
             </property>
            </bean>
         </property>
     </bean>
   </property>
<!-- Redefining maximum memory size for the cluster node usage. -->  
<property name="dataStorageConfiguration">
  <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
    <!-- Redefining the default region's settings -->
    <property name="defaultDataRegionConfiguration">

      <bean class="org.apache.ignite.configuration.DataRegionConfiguration">

        <property name="name" value="Default_Region"/>
        <!-- Setting the size of the default region to 2GB. -->

        <property name="maxSize" value="#{2L * 1024 * 1024 * 1024}"/>

        <property name="persistenceEnabled" value="false"/>

      </bean>

    </property>
  </bean>
</property>

<!-- The rest of the parameters. -->
</bean>

MenuHistoryView是一个实现Serialized的类,并且已存储在arraylist中,arraylist已存储在session中

我还尝试将默认的二进制编码器更改为优化的编码器和 jdk 编码器,但无法修复

最佳答案

所有节点上都有这个类com.bizmatics.prognocis.view.MenuHistoryView吗?我可以看到您启用了 onheap 缓存,这表明您在服务器节点上也需要此类。

您还应该避免两次描述此缓存(在 Java 中和在 XML 中),因为无论如何只会使用一种配置。

关于java - 无法配置 Ignite Web session 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496757/

相关文章:

java - 点燃具有混合持久/非持久缓存节点的集群

Apache Ignite 与 Apache Drill for SQL 的性能对比

java - 如何打印 .jsp 文件中来自 Java 类的变量?

java - Android 编码 : ViewRootImpl$CalledFromWrongThreadException. [菜鸟]

java - 将数据从类传递到 Activity

java - Apache Ignite 作为 Postgresql 表的透明缓存

java - 如何使 Ignite 像使用 TcpDiscoveryMulticastIpFinder 一样使用 TcpDiscoveryVmIpFinder 进行非阻塞操作?

通过 LAN 交换机在节点之间点燃拓扑不稳定

java - 为什么 Selenium Server 找不到定位器

java - 增加 JSpinner 上箭头的大小