思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

把JBoss缓存用作POJO缓存的实战演练

来源:网络    更新时间:2014-12-2


一、引言

  内存缓冲在大规模企业应用软件开发过程中是一个关键的技术,其中往往都有可伸缩性和高性能的需求。一个内存缓冲能存储应用程序状态信息(如,一个Web应用程序中的HttpSession)或数据库查询结果(也即,实体数据)。由于许多企业应用软件运行在一个簇环境下,所以缓存需要跨越簇进行复制。而且,如果需要更高的可靠性的话,内存缓冲也应该被持续性存储到硬盘或数据库中去。

  大多数内存缓冲解决方案都属于我们所称的"普通"缓存系统类——其中存储和缓冲直接参考的对象。既然一个普通缓存直接处理参考对象,那么它就象一个详尽的HashMap结构一样,并因此使用起来非常直观。当一对象需要被复制或持续存储到一个普通缓存系统中时,对象必须实现Serializable接口。然而,普通缓存在复制或持续存储方面也存在一些明显的限制:

  ·用户必须具体地管理该缓存。例如,当一对象被更新时,用户需要执行一相应的API来更新缓存内容。

  ·Java对象串行化的需要可能会对性能有所妨碍。如果对象是巨大的,甚至单个的字段更新也将会激活整个对象的串行化与跨整个簇的复制。这样可能带来不必要的昂贵的代价。

  ·Java对象串行化不可能保存缓冲对象之间的关系。特别地,该缓冲对象不可能被其它对象参考多次(多参考),或到其自身有一个间接参考(循环)。否则,在串行化时该关系将被打破。例如,图1说明在复制期间的这个问题。如果我们有两个共享同一个Address对象的Person实例,那么在复制时它将被拆分成两个独立的Address实例(而不是一个)。


图1.普通缓存在串行化期间不保留对象关系
  相对于上面普通缓冲系统中存在的问题,还有另外一种新型的缓冲系统——POJO(简单Java对象)缓存。一个POJO缓存是一个系统——它担当一个"面向对象的"分布式的缓存。在这个系统中,一旦一个用户把POJO依附到该缓存上,那么缓冲方面(例如复制和持续性)应该对用户是透明的。一个用户只需简单地在该POJO上操作而不须担心更新该缓存内容或维持对象关系的问题。不存在显式的API调用可用来管理该缓存。另外,它还有三个特征:

  ·不需要为POJO实现Serializable接口。

  ·复制(或甚至持续性)是基于字段级的(这与普通缓存中的基于整个对象的二进制级形成对照)-这将导致潜在的性能推进。

  ·对象关系和身份被自动地保存在一分布式复制环境中,这带来透明的使用体验并且提高了软件性能。

  一个领先的内存POJO缓存解决方案就是开源JBoss缓存。JBoss缓存是第一个Java库——它支持可复制的,持续性的,事务性的和良好粒度的缓冲,它可以被使用作为POJO缓存和普通缓存。既然JBoss缓存是百分之百基于Java的,那么它就可以运行在任何JavaSE环境中——包括应用程序服务器内部或作为独立的进程。例如,JBoss缓存已经被应用到针对EJB3.0有状态的会话bean簇和HPP会话复制的应用程序服务器中。

  在本文中,我们将说明怎样把JBoss缓存用作一个POJO缓存(通过它的JBossCacheAop组件)。同时,还将给出一个应用案例来说明在分布环境中的一些关键特性。

  二、JBoss缓存概述

  (一)普通缓存

  JBoss缓存中默认的普通缓存模块称为TreeCache。你可以通过编程方式或通过一外部XML文件对它进行设置。下面是你可以设置的一些特性:

  1.缓存模式:它可以是本地的或者是可复制的。如果它是可复制的,那么你可以进一步指定同步的或异步的模式。

  2.TransactionManager:你可以为JBoss缓存查询指定一个与JTA相匹配的事务管理器。如果它发现一个正在进行中的事务上下文,那么它就会参予到该事务中并且相应地执行提交或回滚。

  3.可插入的驱逐策略:该缓存驱逐策略参考该缓存使用的算法来终止它的内容。在JBoss缓存中,你可以经由一个可插入的接口来实现你自己的驱逐策略。JBoss缓存当前与一个基于地域化的LRUEvictionPolicy一起发行。

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018