【问题标题】:Distributed cache using infinispan on tomcat fails to start在 tomcat 上使用 infinispan 的分布式缓存无法启动
【发布时间】:2013-06-09 15:36:21
【问题描述】:

我正在尝试在我的应用程序中使用 infinispan 作为分布式缓存。

我将它用作使用 spring 和 JPA 进行休眠的二级缓存。

使用此 infinispan-config.xml 将 Infinispan 配置为在分布式集群模式下工作

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd"
xmlns="urn:infinispan:config:5.1">

<global>
    <transport clusterName="sigmaCacheCluster">
        <properties>
            <property name="configurationFile" value="jgroups-tcp.xml" />
        </properties>
    </transport>
    <globalJmxStatistics enabled="true" />
</global>
<default>
    <jmxStatistics enabled="true" />
    <clustering mode="replication" >
        <stateRetrieval fetchInMemoryState="true" />
        <sync/>
    </clustering>
</default>
</infinispan>

当使用与 Infinispan 提供的 demoApp 相同的配置文件时,它可以完美运行,但是在应用程序内部和 Tomcat(7) 上运行时,我遇到了流动错误(请注意,集群已启动并且 infinispan 发现其他节点):

    [DEFAULT APPENDER - FROM WEB] 2013-06-13 11:53:58,248 - INFO org.infinispan.spring.AbstractEmbeddedCacheManagerFactory - Initializing SpringEmbeddedCacheManager instance ...
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:53:58,802 - INFO org.infinispan.configuration.parsing.Parser51 - ISPN000184: The stateRetrieval configuration element has been deprecated, we're assuming you meant stateTransfer. Please see XML schema for more information.
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:53:59,065 - INFO org.infinispan.spring.AbstractEmbeddedCacheManagerFactory - Successfully initialized SpringEmbeddedCacheManager instance [org.infinispan.spring.provider.SpringEmbeddedCacheManager@6ee47e99]
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:53:59,732 - INFO org.infinispan.remoting.transport.jgroups.JGroupsTransport - ISPN000078: Starting JGroups Channel
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:03,263 - INFO org.jgroups.protocols.UFC - UFC is not needed (and can be removed) as we're running on a TCP transport
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:03,581 - INFO org.infinispan.remoting.transport.jgroups.JGroupsTransport - ISPN000094: Received new cluster view: [comp-Lap-28466|5] [comp-Lap-28466, comp-Lap-1139]
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:03,852 - INFO org.infinispan.remoting.transport.jgroups.JGroupsTransport - ISPN000079: Cache local address is comp-Lap-1139, physical addresses are [10.0.0.106:7801]
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:03,858 - INFO org.infinispan.factories.GlobalComponentRegistry - ISPN000128: Infinispan version: Infinispan 'Tactical Nuclear Penguin' 5.3.0.Beta1
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:04,448 - INFO org.infinispan.jmx.CacheJmxRegistration - ISPN000031: MBeans were successfully registered to the platform MBean server.
[DEFAULT APPENDER - FROM WEB] 2013-06-13 11:54:07,237 - ERROR org.jgroups.blocks.RequestCorrelator - failed unmarshalling buffer into return value
java.lang.ClassCastException: org.infinispan.commons.hash.MurmurHash3 cannot be cast to java.util.List
    at org.infinispan.distribution.ch.ReplicatedConsistentHash$Externalizer.readObject(ReplicatedConsistentHash.java:145)
    at org.infinispan.distribution.ch.ReplicatedConsistentHash$Externalizer.readObject(ReplicatedConsistentHash.java:135)
    at org.infinispan.marshall.jboss.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:406)
    at org.infinispan.marshall.jboss.ExternalizerTable.readObject(ExternalizerTable.java:226)
    at org.infinispan.marshall.jboss.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:164)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:351)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
    at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
    at org.infinispan.topology.CacheTopology$Externalizer.readObject(CacheTopology.java:145)
    at org.infinispan.topology.CacheTopology$Externalizer.readObject(CacheTopology.java:134)
    at org.infinispan.marshall.jboss.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:406)
    at org.infinispan.marshall.jboss.ExternalizerTable.readObject(ExternalizerTable.java:226)
    at org.infinispan.marshall.jboss.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:164)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:351)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
    at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
    at org.infinispan.remoting.responses.SuccessfulResponse$Externalizer.readObject(SuccessfulResponse.java:101)
    at org.infinispan.remoting.responses.SuccessfulResponse$Externalizer.readObject(SuccessfulResponse.java:86)
    at org.infinispan.marshall.jboss.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:406)
    at org.infinispan.marshall.jboss.ExternalizerTable.readObject(ExternalizerTable.java:226)
    at org.infinispan.marshall.jboss.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:164)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:351)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
    at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
    at org.infinispan.marshall.jboss.AbstractJBossMarshaller.objectFromObjectStream(AbstractJBossMarshaller.java:163)
    at org.infinispan.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:116)
    at org.infinispan.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegatingMarshaller.java:104)
    at org.infinispan.remoting.transport.jgroups.MarshallerAdapter.objectFromBuffer(MarshallerAdapter.java:50)
    at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:390)
    at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:247)
    at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:665)
    at org.jgroups.JChannel.up(JChannel.java:719)
    at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1008)
    at org.jgroups.protocols.RSVP.up(RSVP.java:187)
    at org.jgroups.protocols.FRAG2.up(FRAG2.java:178)
    at org.jgroups.protocols.FlowControl.up(FlowControl.java:404)
    at org.jgroups.protocols.FlowControl.up(FlowControl.java:386)
    at org.jgroups.protocols.tom.TOA.up(TOA.java:122)
    at org.jgroups.protocols.SEQUENCER.up(SEQUENCER.java:251)
    at org.jgroups.protocols.pbcast.GMS.up(GMS.java:893)
    at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:234)
    at org.jgroups.protocols.UNICAST2.handleBatchReceived(UNICAST2.java:838)
    at org.jgroups.protocols.UNICAST2.up(UNICAST2.java:481)
    at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:675)
    at org.jgroups.stack.Protocol.up(Protocol.java:406)
    at org.jgroups.protocols.FD.up(FD.java:274)
    at org.jgroups.stack.Protocol.up(Protocol.java:406)
    at org.jgroups.protocols.MERGE2.up(MERGE2.java:223)
    at org.jgroups.stack.Protocol.up(Protocol.java:406)
    at org.jgroups.protocols.TP.passBatchUp(TP.java:1383)
    at org.jgroups.protocols.TP$BatchHandler.run(TP.java:1519)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

为了解决这个问题,我已经花费了不止一棵树的时间,但一无所获,感谢您的帮助

编辑:删除&lt;clustering mode="replication"&gt; 时一切正常。

【问题讨论】:

  • 这听起来像是一个类路径问题。您应该仔细检查 lib 目录中的所有 jar 版本,并确保它们都可以很好地协同工作。如果您的 Tomcat 应用程序正在与 JBoss 通信,请确保它们都具有相同的 jar 版本。有这么多的 lib 目录,这样的东西调试起来会很痛苦。 :(
  • 谢谢,我已经返回到 infinispan 缓存提供程序的最后一个稳定版本的 spring,它看起来更好,仍然没有集群,但没有更多的有线异常
  • 很奇怪。请注意,如果您为 Hibernate 2LC 缓存和为您自己的代码使用自己的分布式缓存,则它们需要具有不同的配置文件。 Hibernate 2LC 对缓存设置和它需要定义的命名缓存有一些严格的要求(参见github.com/galderz/secondlc 中的示例)。其次,我建议您尝试使用最新的 Infinispan 5.3.0.CR2 版本...

标签: tomcat caching infinispan jgroups


【解决方案1】:

堆栈跟踪表明您的一个节点正在运行 Infinispan 5.3(或更高版本),而记录错误的节点正在运行 Infinispan 5.2.x(或更低版本)。

Infinispan 不支持在同一个集群中运行不同版本的节点(即使只有微版本不同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2018-12-19
    • 2021-05-02
    • 2019-12-28
    • 2015-07-13
    • 2020-02-13
    • 2013-09-07
    • 2018-10-28
    相关资源
    最近更新 更多