|
| Home > Apache Geronimo v2.0 - JA > Documentation > 9. サンプル・アプリケーション > 9.b. データベース接続の簡単なサンプル・アプリケーション |
この文章は Apache Geronimo アプリケーション・サーバーの持つ JDBC 機能を解説します。JDBC 機能のデモンストレーションでは、JSP、サーブレットによりウェブ関連の機能や組み込みデータベースの Derby を扱う単純な Inventory アプリケーションを利用します.
Inventory アプリケーションはデータベースへの接続方法にサーバー・プロバイダー・インターフェース (SPI) を利用します。この方法では、アプリケーションはデータベースとの接続確立のために JDBC データソース・インターフェースを利用します。これが J2EE アプリケーションの接続方法としてふさわしいのは、以下のいくつかの理由によります。
この文章を読み終えると、Geronimo の JDBC 機能、たとえばデータベース・プールの定義やデータソースを使ってのデータベース接続などの機能を最大限活用することができるようになるでしょう。
この文章は以下のセクションで構成されています。
アプリケーション・サーバーへの JDBC の実装は、アプリケーション・サーバーごとに異なります。以下の表は Apache Geronimo の JDBC 機能一覧です。
| Feature | Description |
|---|---|
| JDBC access | Geronimo は JDBC を直接統合していませんが、総括的な J2CA フレームワークを通しての接続をサポートしています。TranQL プロジェクトは様々なデータベース用 J2CA アダプターです。 |
| JCA implementation | Geronimo は JCA 1.5 仕様をサポートしています。これは JCA 1.0 仕様と下位互換です。 |
| Data sources supported | TranQL は各種データソースの総括的ラッパーです。 |
| Data source failover | TranQL は特定のデータベース (Apache Derby、Oracle、DB2 を含みます) 向けに特化されたドライバーを持っていますので、それらドライバーの拡張機能と密接に統合されます。 例えばロード・バランシングやフェイル・オーバーなどの機能が提供されます。クラスタリングやフェイル・オーバーのために C-JDBC ラッパーを利用することも可能です。 |
| XA support | XA トランザクション、ローカル・トランザクション、トランザクション無しをサポートしています。 |
| Connection Manager Configurability | J2CA フレームワークは異なるコネクション・フレームワークの組み込みを可能にするインターセプターを持ちます。 |
| JTA implementation | トランザクションのサポートは Geronimo Specific Transaction Managing フレームワーク と HOWL により与えられます。 |
| Connection pooling and management | カスタムの Geronimo コードと TranQL はコネクション・プーリングと管理に利用されます。 |
| Legacy driver support | Geronimo JDBC の TranQL−コネクター を通じて Geronimo のサポートする JDBC 3.0 と 2.1 の JCA ラッパーが与えられます。 |
この文章にある Inventory アプリケーションは、この手のアプリケーションの利用場面のうち、基本的な3つについてのみサポートします。
Inventory ウェブ・アプリケーションは以下のページを持ちます。
次の図はアプリケーションのフロー図です。

Inventory アプリケーションは以下のパッケージとクラスを含みます。
ウェブ・アプリケーションのファイルは以下のリストのとおりです。
|- jsp
|- add.jsp
|- error.jsp
|- issue.jsp
|- recv.jsp
|- WEB-INF
|- geronimo-web.xml
|- web.xml
|- welcome.jsp
geronimo-web.xml と web.xml ファイルによって、アプリケーションはデータソースを定義します。geronimo-web.xml は EAR ファイルに含まれ、データベース・プールへのリンクを持ちます。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1"> <environment> <moduleId> <groupId>${pom.groupId}</groupId> <artifactId>${pom.artifactId}</artifactId> <version>${version}</version> <type>war</type> </moduleId> <dependencies></dependencies> </environment> <context-root>/inventory</context-root> <!-- define a reference name to the db pool--> <resource-ref> <ref-name>jdbc/InventoryDS</ref-name> <resource-link>InventoryPool</resource-link> </resource-ref> </web-app>
以下に Inventory アプリケーションの web.xml を示します。データソースを作成する際に利用される geronimo-web.xml と同じ名前を利用しています。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <display-name>AddItemServlet</display-name> <servlet-name>AddItemServlet</servlet-name> <servlet-class>org.apache.geronimo.samples.inventory.web.AddItemServlet</servlet-class> </servlet> <servlet> <display-name>IssueingServlet</display-name> <servlet-name>IssueingServlet</servlet-name> <servlet-class>org.apache.geronimo.samples.inventory.web.IssueingServlet</servlet-class> </servlet> <servlet> <display-name>RecievingServlet</display-name> <servlet-name>RecievingServlet</servlet-name> <servlet-class>org.apache.geronimo.samples.inventory.web.RecievingServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddItemServlet</servlet-name> <url-pattern>/add_item</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>IssueingServlet</servlet-name> <url-pattern>/issue</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RecievingServlet</servlet-name> <url-pattern>/recv</url-pattern> </servlet-mapping> <!-- reference name exposed as a datasource --> <resource-ref> <res-ref-name>jdbc/InventoryDS</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </web-app>
geronimo-application.xml には、アプリケーションにデプロイする必要のあるデータベース・プールがあることを示します。データベース・プールは InventoryPool.xml に定義されています。また、ドライバーとして tranql-connector-ra-3.3.rar ファイルをデプロイする必要があることが記述されています。これら2つのファイルは生成された EAR ファイル内の最上位階層に置きます。
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1"> <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1"> <dep:moduleId> <dep:groupId>${pom.groupId}</dep:groupId> <dep:artifactId>${pom.artifactId}</dep:artifactId> <dep:version>${version}</dep:version> <dep:type>ear</dep:type> </dep:moduleId> </dep:environment> <module> <connector>tranql-connector-ra-1.3.rar</connector> <alt-dd>InventoryPool.xml</alt-dd> </module> </application>
次の重要なアプリケーションの記述はソースコードから定義されたデータソースへ接続するものです。これは DBManager クラスとして扱われます。
public static Connection getConnection(){ Connection con = null; try { Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/InventoryDS"); con = ds.getConnection(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return con; }
このサンプル・データベースは組み込みの Derby データベースを利用しています。サンプル・データベースの名前は InventoryDB で、2つの表を持ちます。ITEM 表と ITEM_MASTER 表です。それぞれの表の列は以下に記述します。
| Table Name | Fields |
|---|---|
| ITEM | ITEM_ID (PRIMARY KEY) ITEM_NAME DESCRIPTION |
| ITEM_MASTER | ITEM_ID (PRIMARY KEY) QUANTITY |
ITEM 表は ITEM_MASTER 表の各アイテムの在庫数量を保持します。
nventory サンプル・アプリケーションの開発、ビルドは次のツールを利用しています。
Apache Derby は Apache DB サブ・プロジェクトであり、Java で実装されたリレーショナル・データベースです。サイズが小さく、Java に基づくソリューションに簡単に組み込めるものです。組み込みフレームワークに加え、Derby は Derby ネットワーク・サーバを利用することで、よくあるクライアント/サーバ・フレームワークもサポートします。
http://db.apache.org/derby/index.html![]()
Maven はエンタープライズ Java プロジェクト向けの有名なオープンソースのビルド・ツールです。 ビルド作業の負荷を軽減できるように設計されました。Maven では Ant や他の伝統的な make ファイルなどで利用されるタスク・ベースの手法ではなく、宣言的手法を利用して、プロジェクトの構成や内容が定義されます。このことにより、企業全体で開 発標準を適用することや、ビルド用スクリプトの記述やメンテナンスに必要な時間を削ることの助けとなります。宣言的で、ライフサイクルに基づく手法を使っ ていた Maven 1 は、伝統的なビルド方法よりも、多くの人にとって、根本的な発展となり、さらに Maven 2 はこの点を高めました。Maven 2 は次の URL からダウンロードできます。
http://maven.apache.org![]()
以下のリンクから Inventory アプリケーションをダウンロードしてください。
Inventory![]()
ファイルを解凍すると、inventory ディレクトリーが作られます。
SVN からサンプルのソースコードをチェックアウトすることができます。
svn checkout http://svn.apache.org/repos/asf/geronimo/samples/trunk/samples/inventory![]()
アプリケーションの構成は、データベースの作成とデータベースへ接続するコネクション・プールの定義を含んでいます。
Apache Geronimo サーバーを始動した後、 Geronimo コンソールへログインし、以下の手順により InventoryDB を作成してください。
CREATE TABLE item(
item_id VARCHAR(10) PRIMARY KEY,
item_name VARCHAR(25),
description VARCHAR(100)
);
CREATE TABLE item_master(
item_id VARCHAR(10) PRIMARY KEY,
quantity INTEGER
);
INSERT INTO item VALUES('001', 'Item 1', 'Test Item 1');
INSERT INTO item VALUES('002', 'Item 2', 'Test Item 2');
INSERT INTO item VALUES('003', 'Item 3', 'Test Item 3');
INSERT INTO item VALUES('004', 'Item 4', 'Test Item 4');
INSERT INTO item_master VALUES('001', 12);
INSERT INTO item_master VALUES('002', 8);
INSERT INTO item_master VALUES('003', 49);
INSERT INTO item_master VALUES('004', 34);
Inventory アプリケーションはソースコードからのビルドに利用できる pom.xml スクリプトが含まれます。コマンド・プロンプトを利用して inventory ディレクトリーへ移動し、mvn install コマンドを入力するとビルドされます。inventory フォルダーの下に inventory-ear-2.0-SNAPSHOT.ear が作られます。これで Geronimo アプリケーション・サーバーへ Inventory アプリケーションをデプロイする準備ができました。
Geronimo Console の利用によって、サンプルアプリケーションのデプロイはかなり簡単です。
サンプル・アプリケーションをテストするには、ブラウザーを開いて http://localhost:8080/inventory
を入力してください。 Inventory アプリケーションの Welcome ページが表示され、そこには注目ボードがあります。

この文章では Geronimo アプリケーション・サーバーでの JDBC 機能の利用方法を示しました。説明にしたがってサンプル・アプリケーションを順々にビルド、デプロイ、テストすればこれらの機能がよく分かります。
この文章の注目点は、以下の通りです。