はじめに
連載の第4回、第5回では、Caché 2007から正式サポートされるJalapeñoテクノロジによるJavaアプリケーション開発について、前半・後半に分けて解説します。この後半では、Jalapeño ObjectManagerによるステップと、POJOアノテーションについて解説します。また、データベース変更後にシステム管理ポータルで確認する作業についても触れたいと思います。
対象読者
- アプリケーション・システム開発をしている人
- データベース関連の開発およびメンテナンスをしている人
- JavaやC#でプログラミングしている人
POJOクラスによる開発 Part 2
Part 1では、SchemaBuilderを使って、Contact.classをもとにデータベーススキーマを生成させました。このbasic.Contactの永続性を管理するためには、永続性マネージャクラスとしてDBService.classを作成し、Jalapeño ObjectManagerによって管理する必要があります。Part 2ではこの方法について解説します。
Jalapeño ObjectManagerを使う際のEclipseの設定
前回でも書きましたが、本連載では、Javaの開発環境として「Eclipse 3.2.0」を、JREシステムライブラリは「jre 1.5.0」を使っています。Eclipseの詳細は省略しますが、本連載のクラスファイルを実行するために最低限必要な設定は次のとおりです。
- 全体の設定として「インストール済みのJRE」をCacheDB.jarのバージョンに合わせる(本連載ではjre1.5.0.xx)
- 全体の設定として「コンパイラー準拠レベル」を5.0とする
- プロジェクトExamplesのプロパティ画面で、[Javaのビルド・パス]-[ライブラリー]の[外部JARの追加]をクリックして、CacheDB.jarを追加する
- ビルド・パスの出力フォルダーを「build」とする
Jalapeño ObjectManagerを使うステップ
前回、Contact.classを作成しましたが、その同じパッケージ内で、DBService.classを作成します。その手順は次のようになります。
- ObjectManagerインスタンスを作成し、java.sql.Connectionオブジェクトで初期化する
- ContactインスタンスをCachéに保存するために、ObjectManagerの
save
メソッドを使うsaveContact
メソッドを作成する - Caché内のすべてのContactインスタンスを開くために、ObjectManagerの
openByQuery
メソッドを使うallContacts
メソッドを作成する
これらの手順はすべてDBService.classとして作成しておきます。DBService.classの完全なコードは次のとおりです。
package basic; import com.jalapeno.ApplicationContext; import com.jalapeno.ObjectManager; import java.sql.Connection; import java.sql.DriverManager; import java.util.Iterator; public class DBService { ObjectManager objectManager; /*
(1) DBServiceコンストラクタでObjectManagerインスタンスを作成
*/ public DBService () throws Exception { String host = "localhost"; String username="_SYSTEM"; // null for default String password="SYS"; // null for default String url="jdbc:Cache://" + host + ":1972/USER"; Class.forName ("com.intersys.jdbc.CacheDriver"); Connection connection = DriverManager.getConnection (url, username, password); objectManager = ApplicationContext.createObjectManager (connection); } /*
(2) ObjcetManager.saveメソッドを使ってCacheに保存
*/ protected void saveContact(Contact contact ) throws Exception { objectManager.save(contact, true); } /*
(3) このallContectsメソッドにより、
データベースからすべてのContactインスタンスを取得し、
POJOにイテレータを返す
*/ protected Iterator allContacts () throws Exception { return objectManager.openByQuery (Contact.class, null, null); } }
こうした作成したbasic.DBServiceというJava永続性マネージャクラスによって、POJOクラスbasic.Contactの永続性が管理できます。それでは、basic.DBServiceクラスの動作確認のために、テスト用クラスを作成し検証してみましょう。次の操作を行うクラスを作成します。
- DBServiceインスタンスの作成
- 2つのContactインスタンスの作成
- DBServiceを使って、ContactインスタンスをCachéに保存
- DBServiceを使って、ContactインスタンスをCachéから取得
このテストクラスのソースコード「Test.java」は次のようになります。
package basic; import java.util.Iterator;s public class Test { private static DBService service; public static void main (String[] args) throws Exception { service = new DBService(); ……(1) //Create and save two contacts ……(2) Contact contact = new Contact(); contact.name = "Smith,John"; contact.contactType = "Business"; service.saveContact(contact); contact = new Contact(); contact.name="Smith,Jane"; contact.contactType="Business"; service.saveContact(contact); ……(3) //retrieve and display contacts for (Iterator iter = service.allContacts(); iter.hasNext();) ……(4) { Contact con = (Contact)iter.next(); System.out.printf( "Name: %s Type: %s\n", con.name, con.contactType); } } }
このTest.javaをビルドし実行すると、Cachéには2つのContactインスタンスが追加されます。上記のDBService.javaとTest.javaという2つのソースコードを、Eclipseを用いてビルドし、Test.classを実行した画面は次のようになります。
この画面最下段にある「コンソール」に、2つのContactインスタンスが表示されました。それではCachéのシステム管理ポータルで、このデータを確認してみましょう。システム管理ポータルの[SQL]から[SQLスキーマを参照]を選び、[basic]スキーマをクリックして、クラス名「basic.Contact」とあるテーブルを開きます。
確かに、ObjectManagerを使って、Cachéに2つのContactインスタンスが保存されました。このsave
メソッドを含めて、ObjectManagerが提供する主なメソッドは、次表の通りです。
メソッド名 | 機能 |
insert | POJOに対応するデータベースにオブジェクトを挿入 |
save | POJOに対応するデータベース内のオブジェクトを更新(オブジェクトがない場合は、新規作成) |
update | POJOに対応するデータベース内のオブジェクトを更新 |
removeFromDatabase | POJOに対応するデータベース内のオブジェクトを削除 |
openByPrimaryKey | 指定された主キーを使って、データベースオブジェクトを検索し、メモリ内でインスタンス化 |
openByQuery | 指定されたSQL条件を満たすクラスのデータベースオブジェクトをメモリ内でインスタンス化 |
ところで、ここまでの手順でCachéを使ったのは、SchemaBuilderウィザードを利用して、Contact
クラスをもとにデータベーススキーマを生成した箇所だけです。それ以外の手順はすべてEclipse上で行っています。このようにJalapeñoは、Cachéを意識することなく、POJOクラスを用いたデータの永続性の管理が可能です。