当前位置: 首页 > 知识库问答 >
问题:

如何集成EHCache2.9&JGroups复制?

冯枫涟
2023-03-14

http://ehcache.org/generated/2.9.0/html/ehc-all/#page/ehcache_documentation_set%2fco-use_supported_types.html%23wwconnect_header

EHCache2.9中的这篇文档说明它将支持RMI、JGroups和JMS。但是,很明显,Ehcache-2.9 JAR中的API已经改变,文档也不是最新的。在我得到下面的错误之后,仔细查看它的EhCache ClassLoaderUtils确认这个方法(getStandardClassLoader())确实不存在。

我正在寻找解决这个问题的好主意,所以我可以在EHCache2.9中使用JGroups复制。

我正在使用最新的ehcache-jgroupsreplication maven依赖项:

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-jgroupsreplication</artifactId>
    <version>1.7</version>
</dependency>



Caused by: net.sf.ehcache.CacheException: java.lang.NoSuchMethodError: net.sf.ehcache.util.ClassLoaderUtil.getStandardClassLoader()Ljava/lang/ClassLoader;
at net.sf.ehcache.CacheManager.init(CacheManager.java:426)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:270)
at org.springframework.cache.ehcache.EhCacheManagerFactoryBean.afterPropertiesSet(EhCacheManagerFactoryBean.java:157)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 39 more
Caused by: java.lang.NoSuchMethodError: net.sf.ehcache.util.ClassLoaderUtil.getStandardClassLoader()Ljava/lang/ClassLoader;
at net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory.createCachePeerProvider(JGroupsCacheManagerPeerProviderFactory.java:61)
at net.sf.ehcache.config.ConfigurationHelper.createCachePeerProviders(ConfigurationHelper.java:136)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:795)
at net.sf.ehcache.CacheManager.doInit(CacheManager.java:471)
at net.sf.ehcache.CacheManager.init(CacheManager.java:395)
... 43 more

共有1个答案

贺浩漫
2023-03-14

我想通了,贴出答案让别人受益。

我必须创建自己的自定义“JGroupsCacheManagerPeerProviderFactory”,而不是使用ehcache-JGroupsReplication1.7maven依赖项中的那个。

实际上,对它的唯一改变是使用了不同的classload,而不调用Ehcache-2.9.jar中不再存在的API:

//final ClassLoader contextClassLoader = ClassLoaderUtil.getStandardClassLoader();

// CHANGE: Use Thread's contextClassLoader instead of invalid API            
final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
<cacheManagerPeerProviderFactory
     class="my.custom.JGroupsCacheManagerPeerProviderFactory"
     properties="file=jgroups/jgroups-unified-udp.xml"/>
 类似资料:
  • 在我的基于sping的项目(spring Version4.1.5.Final)中,我使用了ehcache-core Version2.6.10、ehcache-jgroupsreplication Versione1.7和jGroups3.1.0.Final 这是我的XML ehcache配置: 谢谢。 安杰洛

  • JGroups是一个可靠的群组通讯Java工具包。它基于IP组播(IP multicast),但在可靠性,组成员管理上对它作了扩展。 JGroups的可靠性体现在: 1,对所有接收者的消息的无丢失传输(通过丢失消息的重发) 2,大消息的分割传输和重组 3,消息的顺序发送和接收 4,原子性:消息要么被所有接收者接收,要么全不 JavaGroups的成员关系管理体现在: 1,可以知道组内有哪些成员 2

  • 我试图在Ehcache中使用Jgroups设置一个复制的缓存。我在集群缓存时遇到了问题。我在eclipse中创建了两个项目,每个项目引用不同的ehcache.xml配置文件。 这两个配置文件都是相同的,并且都给出了BEOLW。 我无法在这里找到问题。是我的配置错误吗??请帮助我解决这个问题…

  • 我使用EhCache框架来缓存应用程序数据,并考虑使用JGroups缓存复制来复制集群环境中的缓存。 它真的是集群环境中缓存复制的行业标准吗?或者,我应该考虑其他更好的选择。请注意,此时我没有使用任何集中式缓存服务器。我已经在JGroups缓存复制上做了POC。你能就它的健壮性和主要关注点分享你的经验吗?使用JGroups进行缓存复制的利弊是什么?

  • jgroups-raft 项目是  JGroups 框架对 Raft 的实现。 Maven: <groupId>org.jgroups</groupId><artifactId>jgroups-raft</artifactId><version>0.2</version> Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致性算法)。所不同的是,它的分解为

  • JGroups-ME 是 JGroups 项目在J2ME架构中的一部分,可以在iphone或者pda上使用。