
The Seasar Projectの全貌を探る(3)
SeasarV2によるDBアクセス機能
沖林正紀
2005/9/3
| Seasar(シーサー)は、国内のコミュニティ「The Seasar Project」によって開発が行われているオープンソースプロダクトだ。DI+AOPコンテナとして評価が高いSeasarV2は、J2EE開発の現場にも影響力を持ち始めた。例えば電通国際情報サービスがSeasar Projectを正式に支援することを表明し、2005年6月からは同社による商用サポートサービスが開始されている。本連載では、同プロジェクトの代表的なプロダクトを紹介していく。(編集局) |
SeasarV2(以下S2)には、これまで紹介してきたDIとAOPだけではなく、DBアクセスに関する機能も用意されています。DBアクセスにはトランザクション制御が付き物ですが、S2では、それをインターセプタによって行います。また、実行環境のJDBCドライバがJTAをサポートしていなくても、S2JTAによりそれをエミュレートできるという特長も持ちます。
接続するデータベースやコネクションプールの設定はdiconファイルに記述し、ソースコードにそれらの情報が記述されることはありません。また、SQL文さえもJavaソースコードから分離してdiconファイルに記述する方法も用意されています。DB技術者とJavaプログラマの作業をできるだけ分離したいという場合には、こうした機構も活用してみてください。
今回は、S2でDBアクセスするための手順を紹介することで、S2のDI+AOP技術がDBアクセスにおいてどう活かされているかを理解いただきます(今回の説明に関連する全ソースコードはここからダウンロードできます)。
|
|
データベース接続のための初期設定 |
S2でDB接続を行うためには、最初にデータベースの接続先、コネクションプール、トランザクション制御を設定します。S2は専用のインターセプタでトランザクション制御を行います。
■接続するデータベースの設定(S2JTA)
DBアクセスを行う前に、データベースの接続先を設定します。具体的には、JDBCドライバのクラス名、接続先を表すURL、ユーザー名、パスワードを指定します。
S2では、これらをorg.seasar.extension.dbcp.impl.XADataSourceImplクラスのプロパティとして設定することをdiconファイルに記述します。このクラスはJTAのXAResourceをエミュレートするものです。設定されるのは文字列の定数なので引用符で囲みます。もし使用するデータベースでjavax.sql.XADataSourceインターフェイスを実装したクラスを利用できる場合には、そちらを使うことも可能です。
では実例を見てみましょう。以下はMySQLの場合の設定例です。MySQLでは、あらかじめmy.iniファイルにデフォルトのエンコード設定default-character-set=SJISを設定済みだとします。なお、本稿で使用しているMySQLのバージョンは4.1.12aです。そしてJDBCドライバはConnector/J
3.1.8です。
| MySQLの場合の設定例(diconファイル内) |
<component name="xaDataSource" |
■コネクションプールの設定(S2DBCP)
接続するデータベースを設定したら、次はコネクションプールの設定をdiconファイルに記述します。以下に設定例を示します。コネクションプールを行うクラスはorg.seasar.extension.dbcp.impl.ConnectionPoolImplです。
| コネクションプールの設定例(diconファイル内) |
<component name="connectionPool" |
timeout……用意したコネクションがこの時間以上使われないでいると破棄される
maxPoolSize……同時に接続可能なコネクションの数
allowLocalTx……JTAの制御下にないJDBCのローカルトランザクションを許可する(true)■トランザクションの設定(S2Tx)
S2では、トランザクションを専用のインターセプタで制御します。インターセプタはトランザクション属性に応じて表1のように分かれています。ただ、アプリケーションを開発するごとにこれらをコンポーネント定義に記述するのは面倒ですから、S2に用意されているj2ee.diconというdiconファイルをインクルードし、そこに定義されているコンポーネント名を用いるようにすると、アプリケーションのdiconファイルの記述量を減らすことができます。
表1 トランザクション制御を行うインターセプタ(クラスはすべてorg.seasar.extension.txパッケージ)
| トランザクション属性 | インターセプタのクラス名 | j2ee.diconでの定義 |
| Required | RequiredInterceptor | j2ee.requiredTx |
| RequiresNew | RequiresNewInterceptor | j2ee.requiresNewTx |
| Mandatory | MandatoryInterceptor | j2ee.mandatoryTx |
| NotSupported | NotSupportedInterceptor | j2ee.notSupportedTx |
以下に、インターセプタの設定例を示します。
| インターセプタの設定例 |
<components> |
| コラム データベース関連の設定は別のdiconファイルへ データベースの接続先やトランザクション制御などの設定は、複数のアプリケーションで共有する可能性があります。その場合には、それぞれのアプリケーションでこうした設定を記述したdiconファイルを用いるのではなく、1つのdiconファイルにデータベース関連の設定をまとめて記述しておき、それらをアプリケーションのdiconファイルでインクルードする方法を取るようにすると、設定の共有が便利になるでしょう。 |
| 1/3 |
|
INDEX |
||
| 第3回 S2によるDBアクセス | ||
| Page1 データベース接続のための初期設定 |
||
| Page2 データベースアクセスの実際 |
||
| Page3 メソッドとSQL文の分離 |
||
Seaser Projectの全貌を探る バックナンバー
| Java Solution全記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
