TreeCache是一种结构化的、基于复制的事务缓存。TreeCache是JBoss应用服务器中集群服务—包括JNDI集群、HTTP和EJB的
Sesssion集群、JMS集群—的基础框架。其可以单独使用,可以集成到JBossAS应用,也可以集成到其他的应用服务器上。TreeCache是
一种树状结构,每个节点拥有一个名字和多个或者没有子节点,除跟节点没有子节点其他节点有且只有一个父母节点,可以通过路径名来访问子节点
(FQN:Full Qualified
Name),在一个TreeCache中可以存在多棵树,,即可以有多个根节点。当应用于分布式环境时,由于TreeCache是基于复制的,每个子节点
的值必须是可序列化的。
在下面中,将通过例子来了解TreeCache的功能及其配置,使用JBossCache1.4和JDK5.0。首先是一个最基本使用TreeCache
的程序例子并配置一个TreeCache的配置骨架(各种常用的配置可参见jboss-cache-dist-1.4.0.CR1版本的etc目录,如下
各种配置参考也可见该目录下的范例配置,以下不再强调),见下:
treecache.xml:
<server>
<mbean code=”org.jboss.cache.TreeCache”
name=”jboss.cache:service=TreeCache”>
<depends>jboss:service=Naming</depends>
<depends>jboss:service=TransactionManager</depends>
<attribute
name=”ClusterName”>TreeCache-Cluster</attribute>
<attribute name=”ClusterConfig”>
<config>
<UDP mcast_addr=”228.1.2.3″ mcast_port=”48866″
ip_ttl=”64″ ip_mcast=”true”
mcast_send_buf_size=”150000″
mcast_recv_buf_size=”80000″
ucast_send_buf_size=”150000″
ucast_recv_buf_size=”80000″
loopback=”false”/>
<PING timeout=”2000″ num_initial_members=”3″
up_thread=”false” down_thread=”false”/>
<MERGE2 min_interval=”10000″
max_interval=”20000″/>
<FD_SOCK/>
<VERIFY_SUSPECT timeout=”1500″
up_thread=”false” down_thread=”false”/>
<pbcast.NAKACK gc_lag=”50″
retransmit_timeout=”600,1200,2400,4800″
max_xmit_size=”8192″ up_thread=”false”
down_thread=”false”/>
<UNICAST timeout=”600,1200,2400″
window_size=”100″ min_threshold=”10″
down_thread=”false”/>
<pbcast.STABLE desired_avg_gossip=”20000″
up_thread=”false” down_thread=”false”/>
<FRAG frag_size=”8192″
down_thread=”false” up_thread=”false”/>
<pbcast.GMS join_timeout=”5000″
join_retry_timeout=”2000″
shun=”true” print_local_addr=”true”/>
<pbcast.STATE_TRANSFER up_thread=”true”
down_thread=”true”/>
</config>
</attribute>
</mbean>
</server>
其中ClusterConfig配置在前面JavaGroups的介绍详细介绍,其它配置比较简单,需要进一步了解请参见TreeCache文档。
一、Cache分类
TreeCache按功能分为三类:本地(Local)Cache、复制(Replication)Cache和失效
(Invalidation)Cache。本地Cache只应用于本地环境,后两个Cache可应用于分布式环境,其中,在分布式环境中,复制Cache
当一个Cache实例的一个节点值发生变化时会将变化复制到其它实例中,而失效Cache是当一个Cache实例的一个节点值发生变化时会将其它实例的相
应节点的值设为空,让其重新去获得该值,可通过这种方式缓存大对象以减少在实例中复制对象的代价。分布式Cache(复制和失效Cache)又分为两种,
同步(REPL_ASYNC)和异步(REPL_SYNC),同步Cache是在一个Cache实例做修改时,等待变化应用到其它实例后才返回,而异步
Cache是在一个Cache实例做修改时,即刻返回。其配置见下:
!–
Valid modes are LOCAL
REPL_ASYNC
REPL_SYNC
INVALIDATION_ASYNC
INVALIDATION_SYNC
->
attribute name=”CacheMode”>REPL_SYNC</attribute>
二、事务和并行(Transaction And Concurrent)
TreeCache是一种事务Cache,与JDBC一样,其包括两方面内容:锁和隔离级别。锁分为悲观锁和乐观锁,当使用悲观锁时,分为五个隔离级别,
分别是SERIALIZABLE、REPEATABLE_READ
(default)、READ_COMMITTED、READ_UNCOMMITTED和NONE,隔离级别逐步减弱。乐观锁也叫版本锁,其对数据进行操
作时,将其复制到临时区,操作之后将版本与原有数据比较,如果一致则将递增版本并写回,如果不一致则回滚,由于乐观锁仅在复制出数据和提交数据时对数据加
锁,所以并行度更高,但如果写操作比较频繁地话则容易出现冲突导致回滚。TreeCache默认使用悲观锁。使用TreeCache时,需要使用容器提供
的事务管理器,一般使JBossTransactionManagerLookup和GenericTransactionManagerLookup,
前者应用于JBOSS服务器,后者应用于其他服务器,也可使用DummyTransactionManagerLookup用于测试。如上介绍的配置如
下:
attribute name=”NodeLockingScheme”>OPTIMISTIC</attribute>
<attribute
name=”IsolationLevel”>REPEATABLE_READ</attribute>
<attribute
name=”TransactionManagerLookupClass”>org.jboss.cache.DummyTransactionManagerLookup</attribute>
三、逐出策略(Eviction Policy)
由于内存数量的局限,不可能将所有的Cache数据存放在内存中,但使用内存达到一定极限时,会将部分数据清除出内存,保存到其它持久媒质中,定义的什么
时候清除、如何清除的策略就是逐出策略。自定义一个逐出策略需要实现org.jboss.cache.eviction.EvictionPolicy、
org.jboss.cache.eviction.EvictionAlgorithm、
g.jboss.cache.eviction.EvictionQueue
和org.jboss.cache.eviction.EvictionConfiguration四个接口,系统提供了LRU(Least
recently used,最近最少使用)、LFU(Least Frequently Used最不经常使用)、FIFO(First In
First Out先进先出)、MRU(Most Recently
Used最近最经常使用)四种实现,详细参见org.jboss.cache.eviction包的源代码。配置如下:
<attribute name=”EvictionPolicyConfig”>
<config>
<attribute
name=”wakeUpIntervalSeconds”>5</attribute>
<region name=”/_default_”>
<attribute name=”maxNodes”>5000</attribute>
<attribute
name=”timeToLiveSeconds”>1000</attribute>
</region>
<region name=”/org/jboss/data”
policyClass=”org.jboss.cache.eviction.FIFOPolicy”>
<attribute name=”maxNodes”>5000</attribute>
</region>
<region name=”/test/”
policyClass=”org.jboss.cache.eviction.MRUPolicy”>
<attribute name=”maxNodes”>10000</attribute>
</region>
<region name=”/maxAgeTest/”>
<attribute name=”maxNodes”>10000</attribute>
<attribute
name=”timeToLiveSeconds”>8</attribute>
<attribute name=”maxAgeSeconds”>10</attribute>
</region>
</config>
</attribute>
四、Cache加载
由于逐出策略的存在,那么当我们重新需要获得一个原来在缓存中但确由内存原因被逐出的数据时,就需要定义一种加载策略,使地可以重新找回数据,同
时,Cache加载也肩负在将数据逐出时将数据保存到持久媒质的责任。
根据将数据保存媒质的不同,Cache加载包括FileCacheLoader、JDBCCacheLoader等等,可以同时使用多种加载器来灵活定制
加载策略。例见下:
<attribute name=”CacheLoaderConfiguration”>
<config>
<passivation>false</passivation>
<preload>/</preload>
<shared>true</shared>
<cacheloader>
<class>org.jboss.cache.loader.ClusteredCacheLoader</class>
<properties>
timeout=1000
</properties>
<async>true</async>
<fetchPersistentState>false</fetchPersistentState>
ignoreModifications>false</ignoreModifications>
<purgeOnStartup>false</purgeOnStartup>
</cacheloader>
<cacheloader>
<class>org.jboss.cache.loader.JDBCCacheLoader</class>
<properties>
cache.jdbc.table.name=jbosscache
cache.jdbc.table.create=true
cache.jdbc.table.drop=true
cache.jdbc.table.primarykey=jbosscache_pk
cache.jdbc.fqn.column=fqn
cache.jdbc.fqn.type=varchar(255)
cache.jdbc.node.column=node
cache.jdbc.node.type=longblob
cache.jdbc.parent.column=parent
cache.jdbc.driver=com.mysql.jdbc.Driver
cache.jdbc.url=jdbc:mysql://localhost:3306/jbossdb
cache.jdbc.user=root
cache.jdbc.password=
</properties>
<async>true</async>
<fetchPersistentState>false</fetchPersistentState>
<purgeOnStartup>false</purgeOnStartup>
</cacheloader>
</config>
</attribute>
我们将通过定制如上的配置信息以更有效地使用JBossCache。详细情况可参考JBoss TreeCache参考文档和范例。
TreeCache tree = new TreeCache();
tree.setClusterProperties(“treecache.xml”;
tree.createService();
tree.startService();
tree.put(“/a/b/c”, “name”, “Ben”;
tree.put(“/a/b/c/d”, “uid”, new Integer(322649));
Integer tmp = (Integer) tree.get(“/a/b/c/d”, “uid”;
tree.remove(“/a/b”;
tree.stopService();
tree.destroyService();
以上内容来自:
http://blog.sealyu.com/2010/05/18/jbosscache-treecache%E4%BD%93%E9%AA%8C%E8%BD%AC/
分享到:
相关推荐
标题中的“用JBoss的TreeCache作为Hibernate的二级缓存”指的是在Java应用程序中,使用JBoss TreeCache作为Hibernate框架的二级缓存机制。Hibernate是一个流行的开源对象关系映射(ORM)工具,它允许开发者使用面向...
本篇文章将详细讲解JBoss的安装和部署过程,帮助你深入了解如何在本地环境中设置并运行JBoss应用服务器。 1. **系统要求**: 在开始安装前,确保你的操作系统满足JBoss的最低需求。通常,JBoss支持Windows、Linux...
Jboss 项目部署文档 Jboss 项目部署文档是指在 Jboss 服务器上部署项目的详细步骤,包括环境变量的配置、项目打包、配置文件的修改、JNDI 的配置等。以下是 Jboss 项目部署文档的详细知识点: 一、环境变量配置 ...
本篇将详细讲解如何在MyEclipse中配置JBoss,以便进行无缝的开发与调试。 【配置步骤】 1. **安装MyEclipse**:首先,确保已经安装了MyEclipse。可以从官方网站下载最新版本,并按照指引完成安装。 2. **下载...
本文以JBoss 4.2.2.GA为例进行讲解。 【安装与解压】 安装JBoss非常简单,只需将下载的压缩包解压到指定的目录,例如F:\java\test\jboss-4.2.2.GA。解压后,你会看到JBoss的目录结构,包括以下几个关键部分: - ...
【JBoss 应用服务器详解】 JBoss 是一个开源的、基于 J2EE(Java 2 Platform, Enterprise Edition)的应用服务器,由全球开发者社区共同维护和开发。它最初以 LGPL 许可协议发布,允许商业应用免费使用。2006年,...
JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...
在windows 下对于jboss7配置的学习ppt,包括如何建立一个Datasource
"在IntelliJ IDEA 8中部署Jboss服务器图解" IntelliJ IDEA 8是 JetBrains 公司开发的一款功能强大且灵活的集成开发环境(IDE),它支持多种programming语言,包括Java、Python、Ruby、PHP等。Jboss则是一款流行的...
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...
手册接着详细讲解了JBoss AS7的部署过程。部署是将应用程序或模块放置到JBoss AS7服务器上的过程。手册介绍了如何配置部署描述符,以及如何设置服务器的部署扫描目录,以便于自动化部署。手册中还提到了如何利用...
【JBoss EAP 7.2.6 补丁包详解】 JBoss Enterprise Application Platform (EAP) 是 Red Hat 提供的一款开源中间件,用于构建、部署和管理企业级 Java 应用程序。JBoss EAP 7.2.6 版本是一个重要的更新,包含了多个...
jboss配置入门 jboss系统是一种基于Java的应用服务器,具有高性能、可扩展、安全性强等特点。在本文中,我们将对jboss的基本配置进行介绍,包括其文件夹结构、配置文件、负载均衡配置等。 jboss文件夹结构 jboss的...
JBoss是著名的开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为开发者提供了全面的中间件服务。4.0.5.GA版本是JBoss的一个稳定版本,发布于2006年,适用于那些需要可靠且成熟的Java应用程序部署的...
2. **安装与配置**:书中可能会详细讲解如何在各种操作系统环境下安装JBoss,包括下载、解压、配置环境变量,以及启动和停止服务器的步骤。此外,还会介绍如何配置服务器以满足不同应用需求。 3. **J2EE组件**:...
JBoss是一款著名的开源Java应用服务器,它提供了许多企业级服务,包括事务管理、安全性和集群功能。在开发过程中,为了提高效率,我们通常希望在不中断应用服务的情况下更新部署的应用程序,这就是所谓的“热部署”...
- **部署应用**:讲解了如何将应用部署到 JBoss 服务器上。 - **JNDI 和 Java 客户端**:解释了 JNDI (Java Naming and Directory Interface) 在 Java 客户端中的作用及其配置方法。 #### 四、结论 通过本文档的...
本文档提供了jboss7开发和部署的详细指导,涵盖了jboss7的下载与安装、Eclipse中配置jboss7、项目部署和JNDI获取等方面的内容,旨在帮助开发者快速上手jboss7,并将jboss4.2版本平滑地移植到jboss7。