- Cachéテクノロジガイド
- 機能と特徴
- デモンストレーション
- 導入事例
- ホワイトペーパー・アナリスト
レポート・カタログダウンロード - 製品仕様・ドキュメント
- Caché開発者向け情報
- Caché FAQ
- Caché eラーニング
(USページ) - 無償ダウンロード
ホワイトペーパーとアナリスト・レポート
Javaで問題となるデータベース接続の永続性、
それを解決するInterSystemsの新技術
「CachéにおけるPOJOサポート」
Andreas Dieckow
Principal Product Manager, Strategic Planning
InterSystems Corporation
はじめに
Java プログラミング言語は「一度書けば、どこでもデプロイ可能」な特徴を持つが故に、多くの熱烈な信奉者や開発者がいます。しかし、Java はオブジェクト指向言語であり、そのデータオブジェクトは本質的に、永続性を持ちません。Java の熱烈な信奉者でさえ、リレーショナルデータベースでJava オブジェクトに永続性をもたせるために行なう、オブジェクトとリレーショナルテーブル間のマッピング(O/R マッピング)は単純作業でしかない、と認めます。ある推定によれば、開発労力の60% から 70%が、マッピングに費やされているといいます。
インターシステムズ社のCachéは、リレーショナルデータベースのようにJDBC をサポートするだけでなく、Java アプリケーションにデータの永続性を与えるための、オブジェクト指向の手法を提供しています。CachéクラスはJava のプロキシクラス、または 高パフォーマンスのBean-Managedパーシスタンスを備えたEnterprise Java Beans に投影することができます。このアプローチを行なった場合、O/R マッピングは不要ですが、Java 開発者は、Javaの開発環境で投影し、それを使用するためには、Caché内でデータオブジェクトを作成する必要があります。
このホワイトペーパーでは、インターシステムズ社の新しいJalapeño(ハラペーニョ) テクノロジについて説明します。Jalapeñoテクノロジでは、アプリケーションの開発アプローチに、「Caché-out(CachéからJava)」ではなく、「Java-in(JavaからCaché)」の方法を取ります。Caché内で、POJO (Plain Old Java Object)に永続性を与える方法や、データ・ストレージにオブジェクト技術を使うことの利点について解説します。また、リレーショナルデータベースに対して、Jalapeñoテクノロジを使ってアプリケーションを作るのに必要な手順を概説します。
Jalapeñoテクノロジとは?
インターシステムズ社のJalapeñoテクノロジ(マッピング無しで Java 言語に永続性を与える技術: JAva LAnguate PErsistense with NO mapping) とは、O/R マッピングや、CachéStudio を使わずに、どんなJavaの開発環境でもオブジェクトクラスを定義し、定義されたクラスに、Caché内で永続性を与えることができます。 Java クラスとは独立して、Cachéによって高パフォーマンスのオブジェクトデータへのアクセスメソッドが自動生成されるので、開発者はアプリケーションでPOJOを使うことができます。また、データを格納する方法について考慮する必要がありません。
オブジェクトを永続Java オブジェクトとして扱い、O/R マッピングが不要になると、開発に要する時間が劇的に減少します。また、データを格納し、取り出す時に、オブジェクトをディスアセンブル/アセンブルする手間が省けるので、パフォーマンスも上がる、という利点があります。
データをオブジェクトとして格納する方が望ましいとはいえ、Java アプリケーション、あるいはサードパーティのデータ分析やレポーティングツールでは、SQLでのデータベースに問合せが必要な時があります。Cachéの統一データアーキテクチャでは、データを自動的にリレーショナルテーブルとして見せることができます。もちろん、マッピングは不要です。CachéはJDBC をサポートしており、アプリケーション内のSQLクエリは、Jalapeñoテクノロジのオブジェクトの永続メソッドと同じデータベース接続を共有します。
Jalapeñoテクロノジの活用
Caché内でPOJO に永続性を与えるには、2つの方法があります。1 つは、POJO 定義からCachéクラスを作成し、コンパイルする方法。2つ目は、Java アプリケーション内にJalapeñoオブジェクトマネージャを組み込む方法です。
Cachéクラスの作成
Jalapeñoテクノロジは、Java のクラス定義に基づいて、永続性のあるCachéクラスを生成、コンパイルする機能(スキーマ・ビルダと呼ばれる)を持っています。(スキーマ・ビルダはCachéDB.jar内のJava クラスに含まれています) 開発者は、POJO のクラス定義において”アノテーション”を付加することにより、Cachéがオブジェクトモデルを構築する方法をコントロールできます。アノテーション( JDK1.5 で採用されています)は、Javaクラスのランタイムの振る舞いには影響を受けません。単純に、要求されるCachéオブジェクトモデルについて、メタデータを付加します。例えば、アノテーションは、他のクラスから、ある一つのクラスを継承している、もしくは1つのクラス属性に基づいてインデックスが作成される、といった情報をCachéに伝えます。
例として、1A、1B(次ページ参照)では、簡単なJava のクラス定義と、そこから生成されるCachéクラスの例を取り上げています。ここでは、Cachéクラスは、インターシステムズ社が提供している %Library.Persistent クラスから継承し、インデックスは“Name” 属性に対して生成しています。
Java 開発者は、スキーマ・ビルダによって生成されたCachéクラスを、特に確認したり、それに注意を払う必要は全くありません。また、開発者は、自分の好きなIDEで、POJO を使ってプログラムを書くことができます。オブジェクトモデルが変更された場合は、再度スキーマ・ビルダを動作させるだけで、対応する永続Cachéクラスに変更が反映されます。
例 1A – Java クラス
import com.intersys.pojo.annotations.CacheClass;
import com.intersys.pojo.annotations.Index;
@CacheClass(name="Person",primaryKey="ID",sqlTableName="PERSON")
@Index(description="Name Index on Person table",name="PersonIndexOne",propertyNames={"name"},sqlName="PersonIDX")
public class Person {public String name;
public String ssn;
public String telephone;}
例1 1B – 対応するCachéクラス
Class User.Person Extends %Library.Persistent [ ClientName = Person, Not ProcedureBlock,
SqlTableName = PERSON ]
{
Property name As %Library.String(JAVATYPE = "java.lang.String", MAXLEN = 4096);
Property ssn As %Library.String(JAVATYPE = "java.lang.String", MAXLEN = 4096);
Property telephone As %Library.String(JAVATYPE = "java.lang.String", MAXLEN = 4096);
Index PersonIndexOne On name [ SqlName = PersonIDX ];
XData JavaBlock
{
<JavaBlock><Package implementation="CacheRefactor.cache" pojo="CacheRefactor"></Package><UseSameNames>false</UseSameNames><Name implementation="Person" pojo="Person"></Name><ResolveNameCollisions>false</ResolveNameCollisions>< EagerFetchRequired>true</EagerFetchRequired></JavaBlock>
}
オブジェクトマネージャの使用
Cachéに備わっている他のJava バインディング機能で、CachéクラスがJava のプロキシクラスに投影される場合は、永続化メソッド(%Library.Persistentから継承しています)は Java の“アクセサ”メソッドに変換されます。全てのJava クラスは、アクセサ・メソッドのセットを含んでいます。対照的に、Jalapeñoテクノロジでは、POJO は、アクセサ・メソッドを含むようには変換されません。
その代わりに、Java アプリケーションには、オブジェクトマネージャ、と呼ばれるエレメントを使用します。オブジェクトマネージャは、データベースの接続を確立し、対応するCachéクラスのインスタンスを作成し、アクセサ・メソッドを作成、実行させます。
オブジェクトマネージャは、Java クラスであり、インターシステムズ社のCachéDB.jar の一部として提供されています。使いこなすのに必要な手順は、Javaプログラマにとっては既によく行う手順です。
- アプリケーションの、CLASSPATH 宣言にCacheDB.jar を含める
- “POJO”パッケージ ( CachéDB.jar には、インポートすべき他のパッケージも入っている可能性もあります)をインポートする
- オブジェクトマネージャのインスタンスを作成
例2では、オブジェクトマネージャのインスタンス作成を紹介しています。オブジェクトマネージャは、データベースサーバへJDBC での接続を提供します。Cachéを使うと、オブジェクトとJDBC からのデータベースアクセスは、同じ接続を共有します。従って、オブジェクトマネージャは、高パフォーマンスの永続メソッドを使うことができますが、データには、SQL を使っても問合せができます。
例2 – オブジェクトマネージャのインスタンス作成
public DBService (String[] args)
throws Exception
{
String host = "localhost";
String username="_System"; // null for default
String password="sys"; // null for defaultfor (int i = 0; i < args.length; i++)
if (args[i].equals("-user"))
username = args[++i];
else if (args[i].equals("-password"))
password = args[++i];
else if (args[i].equals("-host"))
host = args[++i];String url="jdbc:Cache://" + host + ":1972/USER";
Class.forName ("com.intersys.jdbc.CacheDriver");
Connection connection = DriverManager.getConnection (url, username, password);
objectManager = ApplicationContext.createObjectManager (connection);
}
リレーショナルデータベースの開発
オブジェクトとリレーショナルデータアクセスの両方を可能にするオブジェクトマネージャは、Jalapeñoテクノロジで作られたJava アプリケーションが、Cachéよりも、リレーショナルデータベースで開発される時に、能力を発揮します。リレーショナルのアーキテクチャでの開発はとても簡単で、たった2つの手順が追加されるだけです。
初めに、適当なリレーショナルデータベースのスキーマを作成します。Cachéは、オブジェクトモデルをプロジェクトするエクスポートユーティリティ(CachéDB.jarの一部分)を提供しています。 エクスポートユーティリティは、元はPOJO のクラス定義から生成されたものですが、オブジェクトモデルを、リレーショナルデータベースにインポートするDDLファイルとして、投影することがききます。
これは、Cachéにおける、標準のリレーショナルプロジェクションではないことを注記します。Cachéのオブジェクトスキーマは、Javaクラス定義から生成され、エクスポート機能はPOJO と関連付けられるので、リレーショナルデータのスキーマを作る際には、その情報を利用することができるからです。
一旦、適切なリレーショナルデータベースのスキーマが作られると、残る作業は、Cachéの代わりにリレーショナルデータベースに接続するための、オブジェクトマネージャの設定です。オブジェクトマネージャは、自動的にCachéに接続する時はオブジェクトの永続化メソッド( Open, Save, New,Delete)を使い、リレーショナルデータベースに接続する時はリレーショナル永続化メソッド(Select、Update、Delete)を使います。
インターシステムズ社のJalapeñoテクノロジは、リレーショナル環境におけるJava アプリケーション開発を簡単にしますが、Cachéで開発すれば、更にアプリケーションを速く動作させることができます。Cachéは永続オブジェクトに対して高いパフォーマンスを実現するだけでなく、特に複雑なSQLクエリに対しても、リレーショナルデータベースより高速に応答するからです。
結論
Cachéは、JDBC とオブジェクトデータアクセスによって、Java アプリケーションに対して、データの永続性を与える点については、長きに渡っていくつかの方法を提供してきました。しかし、これまでは、そのアプローチはあくまでも「Caché中心」でした。開発者はCachéでのオブジェクト定義を行った後に、Java の環境へ投影させることが必要でした。
Cachéの新しいJalapeñoテクノロジは、開発者にデータの永続性を実現するための方法として、”Java-in”という選択肢を提供します。POJOのクラス定義から、永続Cachéクラスが定義され、コンパイルすることができます。ランタイムにおいては、データベースの接続性と永続性は、Jalapeñoの一部分として備わっているオブジェクトマネージャが処理します。開発者は、データベース上、どのように情報に永続性が与えられるか考えることなく、オリジナルのPOJOを使うことができます。
CachéIDE を使う必要がなくなったのに加え、O/R マッピングに時間を費やさずにすみます。Cachéは、同じ接続で、オブジェクトアクセスとリレーショナルアクセスの両方を実現するので、開発者はオブジェクトのみに注力していれば良いのです。Javaアプリケーションは高パフォーマンスでオブジェクト指向の永続化メソッドを使い、必要に応じてCachéデータベースに対してSQLクエリを実行することもできます。
Jalapeñoテクノロジは、開発者がCachéのみでアプリケーション構築をしなければならないといった、制限をするものではありません。結果的にパフォーマンスは期待ほどは良くありませんが、最小限の付加作業で、Jalapeñoテクノロジで作られたJava アプリケーションは、リレーショナルデータベース上でも動作します。
