HOME > WEBワークショップ > JBoss Cache as a POJO Cache 日本語訳
JBoss Cache as a POJO Cache 日本語訳
JBoss Cache 日本語訳 |
||
本文は、JBossCacheAopプロジェクトのBen
Wang氏がONJava,comに向けて書いた記事"JBossCache as a POJO Cache"を、Acroquest Technology 株式会社
小森 裕介が許可を得て日本語に翻訳したものです。小森 裕介は、JBossCacheを使用したサンプルを"JBossCache
as a POJO Cache"の記事に提供しています。 JBoss Cache Home Page : http://www.jboss.org/products/jbosscache ※ 本稿は2005年12月12日現在公開されている原文を元に、 Acroquest Technology 株式会社 堀越悠久史(翻訳)、小森裕介(監修)によって翻訳を行ったものです。 ※ 原文の著作権はBen Wang氏にあります。翻訳文の著作権はAcroquest Technology 株式会社 小森裕介にあります。 ※ 本稿の一部または全部をいかなる手段においてもAcroquest Technology 株式会社の許可なく転載・複製することを禁じます。 ※ 本稿の記述内容を利用することで被ったいかなる不利益に対しても、Acroquest Technology 株式会社及び小森裕介は責任を負いません。 |
||
イントロダクション
スケーラビリティやパフォーマンスが求められる今日の大規模業務アプリケーションでは、メモリキャッシュの利用が不可欠となっています。
メモリキャッシュはアプリケーションの状態(たとえばWebアプリケーションにおけるHttpSessionなど)やデータベスの検索結果(つまり、エンティティデータ)などを格納することができます。
多くのエンタープライズアプリケーションは、クラスタ環境上で動作しているため、キャッシュはクラスタをまたがって複製(レプリケーション)されなければなりません。加えて、さらなる信頼性が求められる場合、メモリキャッシュはハードディスクやデータベースに永続化されなければなりません。
このような機能を提供するキャッシュソリューションは、今のところ私たちが「プレーンな」キャッシュと呼ぶカテゴリに属しています。このようなキャッシュは、オブジェクトの参照を直接キャッシュします。
プレーンキャッシュはオブジェクトの参照を直接的に扱い、ハッシュマップのように振る舞うため、ユーザは非常に直感的に利用することができます。プレーンキャッシュにおいて、キャッシュしたオブジェクトをレプリケーションまたは永続化したい場合、対象オブジェクトは Serializable インターフェイスを実装する必要があります。しかし、このようなやり方には、次のような制限があります。
ユーザは、明示的にキャッシュを管理しなければなりません。
例えば、オブジェクトを更新する際、キャッシュ内容を更新するためにユーザは対応するAPIを明示的に呼び出す必要があります。
オブジェクトのシリアライゼーションが、パフォーマンスの妨げとなります。
たった1つのフィールドが更新される場合でも、オブジェクト全体のシリアライゼーションが引き起こされます。 オブジェクトのサイズが巨大な場合、このためのコストは不必要に"高く"つくことになります。
Javaのオブジェクトシリアライゼーションはキャッシュされたオブジェクト間の関連を保持することができません。とりわけ、キャッシュ上のオブジェクトは他の複数のオブジェクトから参照されたり、間接的に自己参照(再クリックな参照)を持ったりすることができません。なぜなら、このような参照はシリアライゼーションの際に崩れてしまうからです。例えば、図1は、このような関係を持つオブジェクトをレプリケーションする際に起こる問題を示しています。2つのPersonインスタンスが同じAddressを共有している場合、レプリケーション時には1つのAddressインスタンスではなくなり、2つのAddressインスタンスに分かれてしまうのです。

図1: Problem of shared objects during replication
(複製時における共有オブジェクトの問題)
「プレーンな」キャッシュに対し、POJO (Plain Old Java Object)キャッシュと私たちが呼ぶキャッシュ方式があります。POJOキャッシュは"オブジェクト指向"的に振る舞う分散キャッシュシステムです。
この方式では、ひとたびユーザがPOJOをキャッシュに格納すればキャッシングを行うアスペクト(例えば、レプリケーションや永続化アスペクト)が透過的に実行され、ユーザからはレプリケーションや永続化が隠蔽されます。したがって、ユーザは単にPOJOを操作するだけでよく、キャッシュの更新を気にしたりオブジェクト間の関連を一定の形態に維持したりする必要がなくなります。
さらに、POJOキャッシュは以下に示す3つの特徴を持っています。
- POJO が Serializable インターフェイスを実装する必要がありません。
- レプリケーション(あるいは、永続化)はフィールド単位で行われます。(プレーンキャッシュでは、オブジェクト全体で行われていたのとは対照的です)これは、キャッシュにおける性能を向上させることに一役買うでしょう。
- オブジェクトの関係とアイデンティティは、分散環境でのキャッシュやレプリケーション時であっても自動的に保たれます。これは、透過的なキャッシュの使用形態と性能の向上に有効です。
POJOメモリキャッシュの代表的ソリューションが、オープンソースとして公開されている JBossCache です。JBossCacheはレプリケーション機能、永続化機能、トランザクション機能、フィールドレベルでのキャッシングを初めて実現したライブラリです。また、「プレーンな」キャッシュシステムとしても、POJOキャッシュとしても用いることができます。JBossCacheは100%ピュアなJavaベースのシステムであるため、アプリケーションサーバ上であっても、スタンドアローンなJavaプログラム上であっても利用することができます。
JBossCacheは、JBossアプリケーションサーバ上で既に利用されており、例えば EJB 3.0 のステートフル・セッションBeanのクラスタリングや、HTTPセッション・レプリケーションを実現しています。
本稿では、JBossCacheをどのようにPOJOキャッシュとして利用するのか(実際には、JBossCacheAop コンポーネントの実例ですが)を紹介します。また、想定するユースケースとして、分散環境でのキャッシュ機能についても紹介します。


