从名字上来看JBoss Cache很容易使人联想到JBoss Web服务器,但是实际上,你可以“认为”他们之间没有任何关系,学习使用JBoss Cache时不需要你对JBoss Web服务器有任何了解。
什么是JBoss Cache
就像它的名字所显示的那样,它是一种缓存。它被设计用来缓存那些经常被访问的Java对象,这样就可以明显的提高系统的性能,可以很轻松的解决掉数据访问的瓶颈,比如连接数据库等。
JBoss Cache是一种复制缓存,它可以自动与集群中的其他服务器同步状态,这样就可以保证在其中一台或者几台服务器突然挂掉之后恢复缓存,具有很高的可靠性能。
JBoss Cache存储结构为树状结构,使用Fqn(Full Qualified Name)唯一定位其中一个Node,如下图,其中每个方框代表一个独立的JVM。
以上只简单的介绍JBoss Cache的概念,详细信息请参考官方文档: http://jboss.org/jbosscache
既然cache是存在内存中的,那就需要应对各种突发性的事件,以保证它的高可靠性,比如内存不足,或者服务器宕机等,为了解决此类问题,JBoss Cache引入了CacheLoader的概念去备份内存中的缓存数据,同时为了提高系统的性能,CacheLoader可以被配置用来在系统启动的时候预加载部分或者全部历史缓存。
JBoss Cache附带了多种CacheLoader的默认实现,包括FileCacheLoader, JDBCCacheLoader, S3CacheLoader, TCPDelegatingCacheLoader, TransformingCacheLoader等,从名字可以很容理解每种CacheLoader的应用场景,本文将主要演示FileCacheLoader。
简单概括一下什么是CacheLoader
JBoss Cache可以通过CacheLoader将内存中的缓存备份到datastore中。如果JBoss Cache配置了CacheLoader,那么JBoss Cache将提供以下功能:
1. 当访问某个缓存元素的时候, 如果该元素不在内存中,比如它可能被钝化或者因为服务器重启了,那么CacheLoader就会自动的在datastore中查询该元素,如果存在,将会加载到内存中。
2. 当某个缓存元素被修改,添加或者删除的时候,CacheLoader会将这种变化持久化到datastore中。如果使用了事务,那会以事务为单位持久化这种变化。
好了,闲话不在多说了,详情可以参考官方的用户手册:http://docs.jboss.org/jbosscache/3.2.1.GA/userguide_en/html_single/index.html#d0e2507
下面将演示一下如果设置使用FileCacheLoader
首先创建一个FileCache类封装JBoss Cache的相关操作,如下:
package com.javaeye.terrencexu.jbosscache;
import java.io.File;
import java.util.Map;
import org.jboss.cache.Cache;
import org.jboss.cache.DefaultCacheFactory;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
import org.jboss.cache.config.CacheLoaderConfig;
import org.jboss.cache.config.Configuration;
import org.jboss.cache.loader.FileCacheLoader;
import org.jboss.cache.loader.FileCacheLoaderConfig;
/**
* <p>
* This is demo to illustrate how to use the JBoss Cache to cache your
* frequently accessed Java objects in order to dramatically improve
* the performance of your applications. This makes it easy to remove
* data access bottlenecks, such as connecting to a database.
* </p>
* <p>
* As a rule of thumb, it is recommended that the FileCacheLoader not
* be used in a highly concurrent, transactional or stressful environment,
* ant its use is restricted to testing.
* </p>
*
* @author TerrenceX
*
* @param <T>
*/
public class FileCache<T> {
/**
* The JBoss Cache, used to cache frequently accessed Java objects.
*/
private Cache<String, T> cache;
/**
* @constructor
* @param fsCacheLoaderLocation The file system location to store the cache
*/
public FileCache(File fsCacheLoaderLocation) {
cache = initCache(fsCacheLoaderLocation);
}
/**
* Create a Cache and whose cache loader type is File Cache Loader
*
* @param fsCacheLoaderLocation The file position used to store the cache.
*
* @return Cache
*/
public Cache<String, T> initCache(File fsCacheLoaderLocation) {
// initiate a FileCacheLoader instance
FileCacheLoader fsCacheLoader = new FileCacheLoader();
// prepare the file cache loader configuration file for File Cache Loader
FileCacheLoaderConfig fsCacheLoaderConfig = new FileCacheLoaderConfig();
fsCacheLoaderConfig.setLocation(fsCacheLoaderLocation.toString());
fsCacheLoaderConfig.setCacheLoader(fsCacheLoader);
// set configuration to File Cache Loader
fsCacheLoader.setConfig(fsCacheLoaderConfig);
// prepare the configuration for Cache
Configuration config = new Configuration();
config.setCacheLoaderConfig(new CacheLoaderConfig());
config.getCacheLoaderConfig().addIndividualCacheLoaderConfig(fsCacheLoaderConfig);
// create a Cache through the default cache factory
return new DefaultCacheFactory<String, T>().createCache(config);
}
/**
* Add a new node into the tree-node hierarchy
*
* @param fqn Full Qualified Name for the new node
* @return
*/
public Node<String, T> addNode(Fqn<String> fqn) {
return cache.getRoot().addChild(fqn);
}
/**
* Remove a specified node from the tree-node hierarchy
*
* @param fqn Full Qualified Name for the specified node
*/
public void removeNode(Fqn<String> fqn) {
cache.removeNode(fqn);
}
/**
* Add node information to the specified node.
*
* @param fqn Full Qualified Name for the specified node
* @param key The key of the node information
* @param value The value of the node information
*/
public void addNodeInfo(Fqn<String> fqn, String key, T value) {
cache.put(fqn, key, value);
}
/**
* Batch add node information to the specified node.
*
* @param fqn Full Qualified Name for the specified node
* @param infos Node informations map
*/
public void addNodeInfos(Fqn<String> fqn, Map<String, T> infos) {
cache.put(fqn, infos);
}
/**
* Get node information from the specified node.
*
* @param fqn Full Qualified Name for the specified node
* @param key The key of the node information
* @return
*/
public T getNodeInfo(Fqn<String> fqn, String key) {
return cache.get(fqn, key);
}
/**
* Remove node information from the specified node.
*
* @param fqn Full Qualified Name for the specified node
* @param key The key of the node information
*/
public void removeNodeInfo(Fqn<String> fqn, String key) {
cache.remove(fqn, key);
}
}
下面是一个测试的例子:
package com.javaeye.terrencexu.jbosscache;
import java.io.File;
import org.jboss.cache.Fqn;
public class Main {
public static void main(String[] args) {
FileCache<String> fileCache = new FileCache<String>(new File("d:\\tmp"));
Fqn<String> jimmyFqn = Fqn.fromString("/com/manager/jimmy");
Fqn<String> hansonFqn = Fqn.fromString("/com/developer/hanson");
fileCache.addNode(jimmyFqn);
fileCache.addNode(hansonFqn);
fileCache.addNodeInfo(jimmyFqn, "en-name", "Jimmy Zhang");
fileCache.addNodeInfo(jimmyFqn, "zh-name", "Zhang Ji");
fileCache.addNodeInfo(hansonFqn, "en-name", "Hanson Yang");
fileCache.addNodeInfo(hansonFqn, "zh-name", "Yang Kuo");
String enName = fileCache.getNodeInfo(hansonFqn, "en-name");
System.out.println(enName);
}
}
运行结果如下:
- JBossCache MBeans were successfully registered to the platform mbean server.
- JBoss Cache version: JBossCache 'Malagueta' 3.2.5.GA
Hanson Yang
生成的缓存文件目录结构如下:
D:/tmp/com.fdb/manage.fdb/jimmy.fdb/data.dat
D:/tmp/com.fdb/developer.fdb/hanson.fdb/data.dat
本文仅仅是通过FileCacheLoader演示如何使用JBoss Cache,在真正的集群环境中建议不要使用FileCacheLoader, 它只是用来测试玩玩儿而已。
-- done --
- 大小: 25.3 KB
分享到:
相关推荐
jbosscache-core-3.2.5.GA-all.zip 是一个包含JBoss Cache核心组件的压缩包,这个版本是3.2.5.GA,主要用于提供高性能、分布式的缓存解决方案。JBoss Cache,也被称为Infinispan前身的一部分,是JBoss企业中间件的一...
- **JBoss Portal**: 探讨了如何使用JBoss Portal创建企业门户站点,涵盖端到端的部署流程。 #### 实战案例 本书通过大量的实际案例来加深读者对JBoss应用服务器的理解。例如: - **安全配置案例**: 通过配置...
JBoss Cache最早以复制java.util.HashMap的演示项目开始,使用了LGPL许可的JGroups组通信库作为基础。随着时间推移,JBoss Cache不断增加新功能,并在多个开源和商业产品中得到应用,既可以作为分布式状态复制机制,...
4. docs/dtd:在 JBoss 中使用的各种 XML 文件的 DTD。 5. lib:一些 JAR,JBoss 启动时加载,且被所有 JBoss 配置共享。 6. server:各种 JBoss 配置。每个配置必须放在不同的子目录中。子目录的名字表示配置的名字...
JBoss Cache 是一款强大的开源缓存解决方案,尤其适合在企业级应用中作为POJO(Plain Old Java Object)的缓存系统使用。POJO Cache 提供了一种面向对象且分布式的缓存机制,使得用户在处理对象时无需直接关心缓存...
jboss-cache.jar jboss-cache.jar
在这个场景中,开发者或运维人员可能遇到了在WebLogic服务器上部署使用JBOSS CACHE作为CAS集群缓存机制时遇到的技术挑战。WebLogic是Oracle公司的一款企业级Java应用服务器,与JBOSS的环境配置和管理机制有所不同,...
- **门户框架**: 使用JBoss Portlet Bridge集成JSR 286 Portlet 2.0规范。 - **个性化**: 支持用户根据个人喜好定制门户布局和功能。 #### 11. JBoss门户配置 - **门户主题**: 可以自定义门户的主题和外观。 - **...
赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....
- **描述解读**:这本教程是关于 JBoss Seam 的一个详细介绍,适合已经使用或计划使用 Seam 的开发者阅读。 #### 二、开始入门 - **第一章:什么是 Seam?** - **概述**:本章将介绍 Seam 的基本概念,包括它的...
<cache-config xmlns="urn:jboss:cache:config:1.0"> <tree-cache name="my-entity-cache" statistics-enabled="true"> <replicated-cache/> </tree-cache> </cache-config> ``` 这里配置了一个名为"my...
赠送jar包:jboss-logging-3.4.3.Final.jar; 赠送原API文档:jboss-logging-3.4.3.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.3.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.3.Final....
JBoss Cache 提供了一系列丰富的 API 供开发者使用,以下是一些关键的 API: ##### 2.1 API 类 - `Cache`:代表缓存实例的核心类,提供了基本的操作方法。 - `Fqn`:用于表示缓存中的键,支持层次结构的表示。 - `...
- **指定`RegionFactory`实现**:通过`hibernate.cache.region.factory_class`属性指定使用Jboss Cache提供的实现类。 - **共享的Jboss Cache配置**:对于共享的缓存配置,可以使用`SharedJBossCacheRegionFactory...
jboss-例子 一些如何使用 jboss 作为开发应用程序的方法 jboss-ws-stub-generation:如何从 wsdl 开始生成 Web 服务存根类。 ejb-remote-multi:如何使用 sar 登录模块部署耳朵。
【JBoss JBPM4请假流程示例】 JBoss JBPM4是一个开源的工作流管理系统,它为企业提供了一套灵活且强大的业务流程自动化解决方案。这个示例是关于如何在JBoss JBPM4平台上实现一个简单的请假流程,帮助开发者了解...
JBoss安装脚本jbosstools是脚本和示例的集合,以及如何配置JBoss AS和JBoss EAP的示例。先决条件JBoss版本必须为7或更高版本。 Unix风格的操作系统。 在Linux(Fedora,RHEL,Ubuntu),Solaris上测试快速开始将...