DBサービス

'DBサービス'には次の二つのサービスが含まれます:

  • プールブロカーサービス - データベースのコネクションプーリングを提供します
  • マップブロカーサービス - DatabaseMapオブジェクトを管理します

設定

# -------------------------------------------------------------------
#
#  S E R V I C E S
#
# -------------------------------------------------------------------
# Turbine サービスのためのクラスはここで定義しなければなりません。
# フォーマット: services.[name].classname=[implementing class]
#
# サービスのプロパティを設定するには次の書式を用います:
# service.[name].[property]=[value]

services.PoolBrokerService.classname=org.apache.turbine.services.db.TurbinePoolBrokerService
services.MapBrokerService.classname=org.apache.turbine.services.db.TurbineMapBrokerService
.
.
.
# -------------------------------------------------------------------
#
#  D A T A B A S E  S E T T I N G S
#
# -------------------------------------------------------------------
# ここにはデータベースの設定を記述して下さい。より詳しい情報を得るには、
# org.apache.turbine.util.db.pool.*パッケージの中を見てください。
# TurbineのデフォルトドライバはMySQLです。
#
# デフォルトデータベースに接続するためのパラメータです。
# 必ずこれらのパラメータを設定してください。
# -------------------------------------------------------------------

database.default.driver=org.gjt.mm.mysql.Driver
database.default.url=jdbc:mysql://localhost:3306/Turbine
database.default.username=username
database.default.password=password

# ConnectionPoolインスタンスごとにキャッシュに含まれる
# データベースの接続数です。(データベースごとに特定)

database.default.maxConnections=3

# キャッシュに格納されるデータベース接続の合計時間(ミリ秒)です。
# (データベースごとに特定)
#
# デフォルト: 1時間 = 60 * 60 * 1000

database.default.expiryTime=3600000

# タイムアウトが起こる前とエラーがスローされる前にコネクションの要求が
# 待機しなければならない時間の合計(ミリ秒)です。
#
# デフォルト: 10秒 = 10 * 1000

database.connectionWaitTimeout=10000

# プールブローカサービスがコネクションプールの状態を記録する間隔(ミリ秒)です。
#
# デフォルト: ロギングなし = 0 = 0 * 1000

database.logInterval=0

# サポートされたJDBCドライバとそれらに関連するTurbineアダプタです。
# これらのプロパティはDBFactoryが使用します。必要なドライバはすべて
# ここで追加してください。

database.adaptor=DBMM
database.adaptor.DBMM=org.gjt.mm.mysql.Driver

# IDに対する要求が多くなった時に、IDBrokerが持つid_tableの容量を示す
# 列の値を増加させるかどうかを指定します。

database.idbroker.cleverquantity=true

# -------------------------------------------------------------------
#
#  P E E R S
#
# -------------------------------------------------------------------
# データベーススキーマについての情報をTurbineに提供します。
# どんな必須のPeerクラスでも簡素化できます。
#
# デフォルト: org.apache.turbine.util.db.map.TurbineMapBuilder
# -------------------------------------------------------------------

database.maps.builder=org.apache.turbine.util.db.map.TurbineMapBuilder

使用法

プールブローカサービス

デフォルトのプールからコネクションを取得するには、次のようにコードを書くだけです。

DBConnection dbConn = null;
try
{
    dbConn = TurbineDB.getConnection();
    // コネクションを扱う処理を記述してください
}
catch (Exception e)
{
   // コネクション獲得の処理、もしくはあなたのコードからキャッチされます
}
finally
{
    try
    {
        TurbineDB.releaseConnection(dbConn);
    }
    catch (Exception e)
    {
        // データベースコネクションを開放してプールに戻すときに発生するエラーです
    }
}

他のコネクションプールからコネクションを取得するには、 他のプールの名前をTurbineDBに単に渡します。

DBConnection db = TurbineDB.getConnection("mypoolname");

コネクションを確実に開放しプールに戻すために、 常にコードはtry/finallyブロックで囲むべきです。 しばらくするとコードが動かなくなって、 ブラウザから結果が戻らなくなるような事態が起こったら、 何らかの理由でコネクションを開放しプールに戻すことを忘れている可能性が高いです。 コネクションプールの機能を強化するには、所定の時間が経過した後に、 プールに戻さなかったコネクションを片付けてくれる バックグラウンドで動く後片付けのスレッドを追加することです。 このようにしてもコーディングの不備は解決できませんが、 コーディングの不備がシステムに紛れ込もうとする状況には役立つでしょう。