はじめに
Javaアプリケーション用の排他的な組み込みデータベースというアイデアは非常に素晴らしいものですが、その潜在的な力を完全に活用できるようになるにはまだ時間がかかりそうです。現在では、デスクトップアプリケーションやブラウザアプリケーションの補助的なクライアントサイドのデータベースとして、あるいはネットワークデータベースに何か問題が起きた場合のバックアップデータベースとして、このアイデアが使われています。
ネットワークデータベースは、さまざまなアプリケーションのビジネスデータを格納する永続的なリポジトリとして使われていますが、どのアプリケーションにも、ユーザーの画面設定など、ビジネスには関係のない多くのデータが入っています。このようなビジネスに関係のないデータをネットワークデータベースに格納することは、貴重なネットワーク資源とデータベース資源の無駄遣いです。この種のデータはアプリケーションの実行中のみ使用可能にすべきであり、これを実現するパーフェクトなソリューションがJava DBです。
Java DBは、100パーセントJavaベースの軽量RDBMSで、標準のJava仮想マシンを使って実行できます。Java DBは軽量ですが、リレーショナルデータベースシステムのACID(Atomic, Consistent, Isolation, Durable:原子性、一貫性、独立性、耐久性)特性を満たしています。従って、コミット済みのデータを失ったり、破壊の危険にさらされることなく、クラッシュ前のデータを復元することができます。Java DBは、SQLやJDBCなど、すべてのリレーショナルデータベース標準をサポートしています。その結果、プラットフォームに依存せず、標準に準拠しているあらゆるデータベースと相互運用性があります。
Java DBにはさまざまな機能がありますが、なかでも開発者の関心を引くのは、XMLファイルを使ってXMLスキーマをその場で作成し、SQLを使わずにテーブルに行を挿入できる機能です。従来はJavaからDMLステートメントを処理するときにはSQLを使っていましたが、Java DBではSQLを使わずに同じ処理を実行できます。本稿では、Swingを使って組み込みデータベース内のユーザー設定を保管および取得するアプリケーションサンプルを交えて、これらの機能を詳しく解説します。
DdlUtilsコンポーネント
Javaパーサーは、複雑に入り組んだXML文書の構文解析とナビゲーションを行うためのプログラムです。本稿で取り上げるDdlUtilsコンポーネントは、それと同じ概念に基づいて、データベーステーブル内でのデータナビゲーションと操作をJavaコードからダイレクトに行うことができます。DdlUtilsを使うと、データベーススキーマ全体をXML形式でその場で作成することができます。さらにDdlUtilsは、XMLまたはJavaオブジェクトに対する既存のスキーマのリバースエンジニアリングもサポートしています。これにより、トランザクション管理や同時性やバックアップなどのデータベース管理機能をJava DBに担当させ、このデータベースとのやり取りをDdlUtilsで処理するというアーキテクチャが可能になります。
XMLスキーマをその場で作成する
Java DBには、アプリケーションが起動したときにデータベースを作成し、データファイルのディレクトリを削除するだけでデータベースを削除できる機能があります。このアプローチにより、データベースはもはや独立したエンティティではなく、コードの一部になるため、排他的に制御することができます。本稿では、分かりやすいようにゴルフ場検索アプリケーションを作成しながらJava DBのこれらの機能を解説します。サンプルアプリケーションを起動すると、組み込みのJavaデータベースも一緒に起動します。アプリケーションを終了すると、データベースも一緒に終了します。このサンプルアプリケーションはデスクトップアプリケーションですが、標準のJavaなので、プラットフォームに依存せずに実行できます(例えば、モバイルアプリケーションとしても十分に活用できます)。
まず、本稿のサンプルファイルをダウンロードします。ここには、「derby.jar」(Java DB)と「DdlUtils.jar」が入っています。その他のコードはJakarta Commonsから入手したもので、コードのコンパイルに役立ちます。
次に、http://db.apache.org/torque/dtd/database.dtdで公開されているスキーマの規則に従って、データベーススキーマのXMLファイルを作成します。DdlUtilsを使ってDatabaseモデルのJavaオブジェクトにこのXMLを読み込んで構文解析します。
次のコードは、XMLで作成したゴルフ場検索アプリケーションのデータベーススキーマです。
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd"> <database name="testdb"> <table name="userData"> <column name="userName" type="VARCHAR" primaryKey="true" size="20" required="true"/> <column name="password" type="VARCHAR" size="20" required="true"/> </table>
次のコードによって、上記のXMLからDatabaseモデルのJavaオブジェクトが作成されます。
// filename represents the database schema in XML format public Database readDatabaseFromXML(String fileName) { return new DatabaseIO().read(fileName); }
最後に、Platform
クラスを使ってデータベーステーブルを作成します。
// derby is synonym for Java DB Platform platform = PlatformFactory.createNewPlatformInstance("derby"); platform.createTables(conn, database, true, true);