`
theking
  • 浏览: 12589 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Ehcache源代码阅读

阅读更多

1. 配置文件解析 由标准的SAX方式解析ehcache.xml到一个Configuration对象。关键类是BeanHandler+Configuration。BeanHandler的技巧在于xml tag/property与java bean的名称约定,找到一个tag就直接用tag名找到对应的add/extract/set方法call进去。类写的短小精悍,坏处是每个java类的写法都要受到限制。 2. Cache初始化 CacheManager.getInstance()出发singleton的生成。生成方式很简单,new CacheManager()。构造函数也很简单,就call个init方法,这里面完成了所有Ehcache正式工作前的准备工作。

 3. CacheManagerPeerProvider/HeartbeatSender/HeartbeatReciever Ehcache replication的multicast实现实际上只是由multicast方式维护各个Ehcace node之间的heartbeat通讯,而真正的cache内容replication而是rmi方式做的unicast。这意味着在N个节点的cluster里,一个节点需要做n-1次rmi才能完成一次replication。如果N很大而且系统频繁更新cache内容的话,结果应该会很不理想。 相关配置: <cacheManagerPeerProviderFactory properties="peerDiscovery=automatic, multicastGroupAddress=, multicastGroupPort=, timeToLive=1"/> 其中,multicastGroupAddress/multicastGroupPort就是heartbeat sender和reciever用来通信的multicast地址和端口。地址必须使用multicast ip adress. MulticastKeepaliveHeartbeatSender: 这是个每隔5秒持续往其他节点发送heart beat的线程。它会把节点内所有的cache的JNDI地址发送出去。本地cache列表通过CacheManagerPeerListener获得。 private List createCachePeersPayload() { CacheManagerPeerListener cacheManagerPeerListener = cacheManager.getCachePeerListener("RMI"); ...... List localCachePeers = cacheManagerPeerListener.getBoundCachePeers(); ..... } Heartbeat payload数据结构如下: //hostName:port/cache name|//hostName:port/cache name MulticastKeepaliveHeartbeatReceiver: 后台线程监听multicast数据,将接收到的heartbeat payload解析成CachePeer对象注册到CacheManagerPeerProvider的peer list中。 4. CachePeerListener 这个listener监听所有的cache添加和移除操作,为每一个cache进行JNDI/RMI注册。配置如下: <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="port=,socketTimeoutMillis=12000,hostName="/>

  类图如下:

  5. Cache replicator 决定一个cache是否需要replication的因素是看有没有给这个cache配置Replicator. <defaultCache ......> <cacheEventListenerFactory properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true "/> </defaultCache> 此处定义的replicator会被放到Cache对象的registeredEventListeners中去,在cache元素发生变化时触发listener相应动作。 protected boolean isDistributed(Ehcache cache) { Set listeners = cache.getCacheEventNotificationService().getCacheEventListeners(); for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { CacheEventListener cacheEventListener = (CacheEventListener) iterator.next(); if (cacheEventListener instanceof CacheReplicator) { return true; } } return false; } 此方法在cache生成是调用,如果返回为true,则为之生成Remote对象CachePeer并注册到JNDI中去。 CachePeer类图如下:

  各类listener总结: CacheManagerEventListener:负责监听cachemanager的操作,调用cachemanager的addCache/removeCache是触发。默认配置Ehcache没有包含该listener的实现,只有一个抽象类。可以自己扩展自定义类。 CacheManagerPeerListener:负责监听和维护cachepeer,触发方式和上一个类似。实际上也是出自同一个接口。 CacheEventListener:负责处理cache事件。比如为cache replication实现了:RMIAsynchronousCacheReplicator和RMISynchronousCacheReplicator Cache replication过程如下: 

 

  • 大小: 14.4 KB
  • 大小: 21.6 KB
  • 大小: 20.3 KB
  • 大小: 40.3 KB
  • 大小: 27.2 KB
1
0
分享到:
评论

相关推荐

    JavaEE源代码 ehcache-1.1

    JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源代码 ehcache-1.1JavaEE源...

    java源码:ehcache(Java缓存框架 EhCache).rar

    EhCache是一个开源的Java缓存框架,广泛用于提高应用程序的性能和响应速度。它允许在内存中存储数据,减少对数据库的访问,从而优化系统性能。以下是对EhCache框架的一些关键知识点的详细说明: 1. **缓存概念**: ...

    ehcache-core1.7.1源代码

    ehcache-core-1.7.1-sources.jar

    ehcache.jar及源码

    `ehcache-core-2.5.2-sources.jar`则是Ehcache的源代码文件,开发者可以查看源码来理解Ehcache的工作原理,进行调试,或根据需要自定义扩展。源码库包含所有类的定义、方法实现以及注释,对于深入学习和定制Ehcache...

    SSH三层架构MVC,Hibernate(ehcache)二级缓存技术,源代码

    SSH三层架构MVC(struts1.3+spring2.x+hibernate3.2),Hibernate(ehcache)二级缓存技术,Spring 注解形式依赖注入,ehcache缓存 源代码,内有MySql anbyke.sql文件,方便创建数据库演示效果!

    Jive源代码.zip

    在性能优化方面,Jive源代码展示了缓存机制的运用,如使用Ehcache或Redis进行数据缓存,减少数据库查询的次数,提高系统响应速度。同时,Jive还可能利用负载均衡和分布式计算技术,如Hadoop或Spark,来处理大规模...

    ehcache-3.3.1-API文档-中文版.zip

    赠送源代码:ehcache-3.3.1-sources.jar; 赠送Maven依赖信息文件:ehcache-3.3.1.pom; 包含翻译后的API文档:ehcache-3.3.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.ehcache:ehcache:3.3.1; 标签:...

    Ehcache 简单的监控

    标签中的“源码”提示我们,Ehcache的源代码也是学习和调试的重要资源。通过阅读源码,我们可以深入了解其内部工作流程,如缓存的加载、替换策略、同步机制等。对于复杂的缓存问题,分析源码有时是解决问题的最快...

    Hibernate 源代码(非常好)

    这个"Hibernate源代码(非常好)"的压缩包显然包含了完整的Hibernate源代码,对于理解其内部工作原理、学习ORM技术和深入研究Java持久化机制极具价值。 首先,Hibernate的核心功能在于将Java对象转换为数据库中的...

    ehcache 测试 反射类 例子

    通过分析这些源代码,你可以学习如何集成Ehcache到你的应用程序中,以及如何使用反射进行测试和调试。 总结起来,这个例子展示了如何将Ehcache的强大缓存能力与Java反射机制相结合,以提高测试的灵活性和覆盖率。...

    ehcache-3.9.9-API文档-中英对照版.zip

    赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.ehcache:ehcache:3.9.9...

    hibernate项目源代码

    《深入剖析Hibernate项目源代码》 Hibernate,作为Java领域中的一款流行的对象关系映射(ORM)框架,极大地简化了数据库操作。它通过提供一个抽象层,使得开发人员可以使用面向对象的方式来处理数据库交互,而无需...

    java 企业黄页B2B源代码

    【Java企业黄页B2B源代码】是一个基于Java编程语言开发的企业级应用程序,主要用于构建一个B2B(Business-to-Business)平台。这个平台旨在连接企业,促进商业交易和信息交流。源代码的提供意味着我们可以深入理解其...

    ehcache-2.10.0-API文档-中文版.zip

    赠送源代码:ehcache-2.10.0-sources.jar; 包含翻译后的API文档:ehcache-2.10.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:net.sf.ehcache,artifactId:ehcache,version:2.10.0 使用方法:...

    ehcache-3.9.9-API文档-中文版.zip

    赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.ehcache:ehcache:3.9.9; 标签:...

    ehcache-terracotta代码配置

    在Java代码中,使用Ehcache API创建缓存实例,如下所示: ```java CacheManager cacheManager = CacheManager.create(); Cache myCache = cacheManager.getCache("myCache"); ``` 确保在应用程序启动时初始化`...

    ehcache-2.10.0-API文档-中英对照版.zip

    赠送源代码:ehcache-2.10.0-sources.jar 包含翻译后的API文档:ehcache-2.10.0-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:net.sf.ehcache,artifactId:ehcache,version:2.10.0 ...

    ehcache2.4.3

    - **ehcache-core-2.4.3-sources.jar**:这个文件包含了Ehcache源代码,对于开发者来说,这是一个宝贵的资源,可以帮助理解Ehcache的工作原理,进行调试或自定义扩展。 总的来说,Ehcache 2.4.3是一个重要的Java...

    ehcache-core-2.6.11-API文档-中文版.zip

    赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档:ehcache-core-2.6.11-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    ehcache-web-2.0.4-API文档-中文版.zip

    赠送源代码:ehcache-web-2.0.4-sources.jar; 赠送Maven依赖信息文件:ehcache-web-2.0.4.pom; 包含翻译后的API文档:ehcache-web-2.0.4-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

Global site tag (gtag.js) - Google Analytics