« Tomcatでフェイルオーバー(FileStore) | Main | Tomcatでフェイルオーバー(SimpleTcpCluster) »

2007.06.02

Tomcatでフェイルオーバー(JDBCStore)

 JDBCStoreは、文字通りJDBCを用いてデータベースにセッション情報の保管を行います。試しに、MySQLConnector/Jを用いてJDBCStoreの設定を行ってみました。

  • MySQLにスキーマsessionおよびアカウントsesuser(パスワード:sespass)を追加。スキーマsessionに対しての全ての権限をsesuserに割り当て。
  • JDBCドライバが含まれているmysql-connector-java-5.0.6-bin.jarを、Tomcatのserver/libフォルダ内にコピー。
  • セッション情報を保管するテーブルを作成。例えば以下のような感じ。
    create table session.sessions (
    id varchar(100) not null primary key,
    valid char(1) not null,
    maxinactive int not null,
    lastaccess bigint not null,
    app varchar(255),
    data blob
    );

  •  context.xmlの設定は以下のような感じ。

    <Store className="org.apache.catalina.session.JDBCStore"
     driverName="com.mysql.jdbc.Driver"
     connectionURL="jdbc:mysql://localhost:3306/session"
     connectionName="sesuser"
     connectionPassword="sespass"
     sessionTable="sessions"
     sessionIdCol="id"
     sessionAppCol="app"
     sessionDataCol="data"
     sessionLastAccessedCol="lastaccess"
     sessionMaxInactiveCol="maxinactive"
     sessionValidCol="valid"
     >
    </Store>

    対応するテーブル名やカラム名をそれぞれ指定することになります。なので、JDBCでアクセス可能なDBで、かつ必要な型をサポートしているものであれば、PostgreSQLなどいろいろなDBを利用できるかと思います。

     なお、Tomcat5.5.23では、CREATE TABLE処理は実装されていないため、あらかじめ作成しておく必要があります。また、セッション情報の更新を行う際は、常にDELETE&INSERTで行うようになっているようです(コメントに、TODOとして「既に存在する場合はUPDATEを行うように」と書かれています)。

    【参考】
    Tomcat5.5 JDBCStore JavaDoc
    Tomcat5.5のserver.xmlについての解説です。
    Tomcat5のクラスタリング機能

    |

    « Tomcatでフェイルオーバー(FileStore) | Main | Tomcatでフェイルオーバー(SimpleTcpCluster) »

    Java」カテゴリの記事

    Subversion・Trac・etc.」カテゴリの記事

    Comments

    Post a comment



    (Not displayed with comment.)


    Comments are moderated, and will not appear on this weblog until the author has approved them.



    TrackBack


    Listed below are links to weblogs that reference Tomcatでフェイルオーバー(JDBCStore):

    « Tomcatでフェイルオーバー(FileStore) | Main | Tomcatでフェイルオーバー(SimpleTcpCluster) »