The ASF -- Apache Software FoundationJAMES - Java Apache Mail Enterprise Server

James

ダウンロード

ドキュメント

プロジェクト

関連プロジェクト

有益な情報

日本語訳 (Translations)

オリジナル

James 2.0 - JDBCの使用

このドキュメントは、どのようにJAMES 2.0 がJDBCを通じてデータベースにデータを蓄積するかを説明するものです。Darrell DeBoer氏によって書かれたReadMeファイルを元にしています。

目標

主たる目的は、

  • Avalon及びCornerstoneのDataSourceコンポーネントをコネクション確立、コネクションプーリングに利用すること(done)
  • UsersJdbcRepositoryから、クラス内にハードコードされていたSQL文を無くす事 (done)
  • 'SqlResources.java' - DB製品をJDBCコネクション文字列から判別し、SQL文を記述したファイルから対応するDB製品に適切なSQL文を選択すること(done)
  • データベース利用型のUserRepositoryの実装を異なるUserでも容易にすること(done)
  • MailRepositoryと同じように"URL://"形式にすることで、configファイル内のUserRepositoryの記述を単純化すること (done)
  • 現在あるUserRepositoryの実装を統合し、共通の機能を抜き出す事(TODO)
  • Have UserStore serve up repository implementations based on: storage, User implementation, and location. (TODO)

Other Goals (reuse development in JdbcMailRepository):

  • Avalon及びCornerstoneのDataSourceコンポーネントをJdbcMailRepositoryで使用すること(done)
  • DB製品に特有のSQLを、SqlResources.javaを利用することでJdbcMailRepositoryに伝える事(done)
  • JdbcMailRepository用のテーブルを自動的に作成すること (done)
  • .propertiesファイルをデータベース毎に用意せず、統一化すること (done)

使用説明書

主な設定は、configファイルの<database-connections>タグセクションで行います。configファイル内に例としてMySqlを使用したものを入れていますが、他のデータベース製品では試していません(ただ、それほどSQL文は変えていませんので、他のプラットフォームでも十分動くと思います)。

configファイル内で設定すべきものは、以下のもののみです:

  • <driver>使用するデータベースドライバのClass名</driver>
  • <dburl>使用するデータベース用のJDBCコネクション文字列</dburl>
  • <user>データベースユーザ名</user>
  • <password>上記ユーザに対応するパスワード</password>

テストに関する説明書 (ユーザレポジトリ)

  • 遠隔管理ツールにTelnetで接続します: "telnet localhost 4555"
  • ユーザ管理を行います - type "help" for options.
  • "use list-james"と打ち、レポジトリをこのlist (list-james) に切り替えます
  • ユーザ一覧を表示します
  • "james-on@localhost"宛てに電子メールを送ります
  • 再びユーザ一覧を表示します
(note: "LocalUsers"以外のレポジトリ内では、いくつかのユーザ管理コマンドが失敗します)

メールレポジトリ

Mailレポジトリは主に"destinationURL"プロパティでの設定に基づきます。次の書式に基づきます:"db://datasource/table[/repository]"
その他、sqlResources.xmlが場所を規定する"sqlFile"や複合形式用の"filestore"といった上記以外の設定を含めたり、あるいはデフォルトのままにしておく事が出来ます(詳細は下記をご覧下さい)

MailStoreに登録された各レポジトリは、"config"タグセクションを含めることが可能です。"config"タグセクションは、MailStoreクラスのレポジトリを作成する際に使われるデフォルトの設定です。これにより、JDBCMailRepositoryがどこで使われようが設定を特定する必要がなくなります。SPOOLレポジトリはDB及びFILE内(filestoreタグ内)での格納にしましたが、MAILレポジトリは100%DB内での格納にしました。

"inbox"及び"spool"のレポジトリに関する新しい設定についてはテストしていますが、"error""spam""outgoing"の3つのレポジトリについてはテストしていません。

SqlResources.xmlファイル内のSQL文は、MySQL及びMS-SQLで既にテストされています。MS-SQL用に特別に"getMessageSize" SQLが入っていますが、これは任意です。

手動でテーブルを作成する必要は無く、テーブルは自動的に作成されます。MS-SQL及びMySQL用の"Create Table"文を入れましたが、他のDB製品用も今後入れていく必要があります。(訳注:Oracleなどは入っています)

ユーザレポジトリ

JdbcUsersRepositoryの殆どの動作を処理し、新しいJdbcUsersRepositoryを容易に新規追加可能にする"AbstractJdbcUsersRepository"を付け加えました。この抽象化されたクラスは、Userの実装内容を保持せず、UsersRepositoryの具体的な実装をするメソッドのオーバーライドが制約されています。

"SqlResources"というSQL定義用ファイル読み取り用のオブジェクトから、AbstractJdbcUsersRepositoryはSQL文を取得し、<sqlDefs>タグ要素を検索し、そこに含まれるSQL文字列を準備します。更に、SqlResourcesクラスは他の2つの事を扱います:

  • a) SQL内でパラメタの置換を行います(例:"table"パラメタ値をSQL文の中の全ての${table}の中で置き換えます)。現在、全てのパラメタ値は<sqlParameters>タグ要素に記述されています。SQL定義ファイルそのものに(<parameters>タグ要素に入れる事で)、パラメタ値を定義したり、お望みであればデフォルト値を定義したりすることも可能です。
  • b) どのDB製品が使われているかを判別するためJDBC接続を試みます。その後、DB製品(例:mysql)に特有のSQL文が自動的に使用されます。(自動判別は、Connection.getMetaData.getDatabaseProductName()でのregexpマッチで行われます)

AbstractJdbcUserRepositoryをより具体化する3つのサブクラス(DefaultUser、DefaultJamesUser、ListUser用)を追加しました。ListUserは、今のところ名前だけしかありません。新しいレポジトリを実装するためにどれほど少ない労力が必要かと示すための例です。ListUsersJdbcRepositoryは、複数の名前のリストを一つのテーブルに格納する事が出来ます。

テストを可能とする為、"RemoteManagerHandler"に若干の修整を加えました。"use [userRepositoryName]"コマンドを使う事で、遠隔管理ツール内でそのレポジトリを管理できます。ただ、単にテストを容易にするためのもので実際の現場で使われる事を意図するものではありません。今回の版に含まれる"james-config.xml"では4つのjdbcレポジトリを用意しています:

  • "localUsers" - JamesUsersJdbcRepository.
  • "list-james" - ListUsersJdbcRepository:ListServ mailetで使用される
  • "list-test" - 別のListUsersJdbcRepositor:テスト用 for testing.
  • "default-users" - DefaultUsersJdbcRepository:テスト用

AvalonのDataSourceコンポーネントがうまく機能するよう、今回の版では"avalon-excalibur.jar"を入れ、改良しました。


Copyright © 1999-2007, Apache Software Foundation
Translated into Japanese by Tetsuya Kitahata, powered by Terra-International, Inc.
Original English Page would be found from HERE     --    ApacheNews    ASF プロジェクト一覧
Terra-International, Inc. -- テラ・インターナショナル
Special Thanks -- 【お問い合わせ/テキスト広告】