`
terrencexu
  • 浏览: 122509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBoss Cache: 使用FileCacheLoader示例

    博客分类:
  • Java
阅读更多

从名字上来看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
1
0
分享到:
评论

相关推荐

    jbosscache-core-3.2.5.GA-all.zip

    jbosscache-core-3.2.5.GA-all.zip 是一个包含JBoss Cache核心组件的压缩包,这个版本是3.2.5.GA,主要用于提供高性能、分布式的缓存解决方案。JBoss Cache,也被称为Infinispan前身的一部分,是JBoss企业中间件的一...

    JBoss实战:服务器配置指南(JBoss in action)

    - **JBoss Portal**: 探讨了如何使用JBoss Portal创建企业门户站点,涵盖端到端的部署流程。 #### 实战案例 本书通过大量的实际案例来加深读者对JBoss应用服务器的理解。例如: - **安全配置案例**: 通过配置...

    Advanced JBoss Cache

    JBoss Cache最早以复制java.util.HashMap的演示项目开始,使用了LGPL许可的JGroups组通信库作为基础。随着时间推移,JBoss Cache不断增加新功能,并在多个开源和商业产品中得到应用,既可以作为分布式状态复制机制,...

    JBoss篇:安装与配置

    4. docs/dtd:在 JBoss 中使用的各种 XML 文件的 DTD。 5. lib:一些 JAR,JBoss 启动时加载,且被所有 JBoss 配置共享。 6. server:各种 JBoss 配置。每个配置必须放在不同的子目录中。子目录的名字表示配置的名字...

    使用jboss cache 作为pojo cache

    JBoss Cache 是一款强大的开源缓存解决方案,尤其适合在企业级应用中作为POJO(Plain Old Java Object)的缓存系统使用。POJO Cache 提供了一种面向对象且分布式的缓存机制,使得用户在处理对象时无需直接关心缓存...

    jboss-cache.jar

    jboss-cache.jar jboss-cache.jar

    用JBOSS CACHE 做CAS集群在weblogic上部署的问题

    在这个场景中,开发者或运维人员可能遇到了在WebLogic服务器上部署使用JBOSS CACHE作为CAS集群缓存机制时遇到的技术挑战。WebLogic是Oracle公司的一款企业级Java应用服务器,与JBOSS的环境配置和管理机制有所不同,...

    JBoss实战:服务器配置指南

    - **门户框架**: 使用JBoss Portlet Bridge集成JSR 286 Portlet 2.0规范。 - **个性化**: 支持用户根据个人喜好定制门户布局和功能。 #### 11. JBoss门户配置 - **门户主题**: 可以自定义门户的主题和外观。 - **...

    jboss-logging-3.4.1.Final-API文档-中文版.zip

    赠送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: Simplicity and Power Beyond Java EE

    - **描述解读**:这本教程是关于 JBoss Seam 的一个详细介绍,适合已经使用或计划使用 Seam 的开发者阅读。 #### 二、开始入门 - **第一章:什么是 Seam?** - **概述**:本章将介绍 Seam 的基本概念,包括它的...

    Hibernate 2nd-level cache: JBoss Caching 配置与注意事项

    &lt;cache-config xmlns="urn:jboss:cache:config:1.0"&gt; &lt;tree-cache name="my-entity-cache" statistics-enabled="true"&gt; &lt;replicated-cache/&gt; &lt;/tree-cache&gt; &lt;/cache-config&gt; ``` 这里配置了一个名为"my...

    jboss-logging-3.4.3.Final-API文档-中文版.zip

    赠送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

    JBoss Cache 提供了一系列丰富的 API 供开发者使用,以下是一些关键的 API: ##### 2.1 API 类 - `Cache`:代表缓存实例的核心类,提供了基本的操作方法。 - `Fqn`:用于表示缓存中的键,支持层次结构的表示。 - `...

    Hibernate Jboss cache

    - **指定`RegionFactory`实现**:通过`hibernate.cache.region.factory_class`属性指定使用Jboss Cache提供的实现类。 - **共享的Jboss Cache配置**:对于共享的缓存配置,可以使用`SharedJBossCacheRegionFactory...

    jboss-examples:JBoss 示例

    jboss-例子 一些如何使用 jboss 作为开发应用程序的方法 jboss-ws-stub-generation:如何从 wsdl 开始生成 Web 服务存根类。 ejb-remote-multi:如何使用 sar 登录模块部署耳朵。

    JBoss JBPM4请假流程示例

    【JBoss JBPM4请假流程示例】 JBoss JBPM4是一个开源的工作流管理系统,它为企业提供了一套灵活且强大的业务流程自动化解决方案。这个示例是关于如何在JBoss JBPM4平台上实现一个简单的请假流程,帮助开发者了解...

    jbosstools:一些与JBoss AS配合使用的工具

    JBoss安装脚本jbosstools是脚本和示例的集合,以及如何配置JBoss AS和JBoss EAP的示例。先决条件JBoss版本必须为7或更高版本。 Unix风格的操作系统。 在Linux(Fedora,RHEL,Ubuntu),Solaris上测试快速开始将...

Global site tag (gtag.js) - Google Analytics