SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Tomcat 10.x で DB を使用したセッション永続化を使用する場合の設定についてのメモ

leave a comment

Tomcat 9.x までであれば、次の記事のような方法で対応することができました。

10.x 以降ではこれらの記事の設定だと動作しなくなっていたようなので、設定についてをメモとして。

DB ではありませんが、セッションを外部ストアに格納する方法については Redis と Apache TomcatのHttpSession連携 も参考になります。

9.x までは Class として、org.apache.catalina.session.JDBCStore を使用した記事が多いようですが、ドキュメントに記載されているようにこの Class は 10 で廃止されており、10 でこのクラスを利用しようとした場合は Class Not Found となるため、org.apache.catalina.session.DataSourceStore を使用する必要があります。

Deprecated.

Removed in Tomcat 10 and replaced by DataSourceStore with removal of legacy JDBC code

設定については Context.xml に Resource で、使用するデータソースを定義し、

<Context>
    <Resource name="jdbc/PostgresDS" auth="Container" type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="yourUsername" password="yourPassword" driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://localhost:5432/yourDatabase"/>
</Context>

 

Manager でセッションストアのテーブルの情報を指定すれば、対応することができます。

<Manager className="org.apache.catalina.session.PersistentManager" 
         saveOnRestart="true">
    <Store className="org.apache.catalina.session.DataSourceStore"
           dataSourceName="jdbc/PostgresDS"
           sessionTable="tomcat_sessions"
           sessionIdCol="session_id"
           sessionDataCol="session_data"
           sessionValidCol="session_valid"
           sessionMaxInactiveCol="session_max_inactive"
           sessionLastAccessedCol="session_last_accessed"/>
</Manager>

 

テーブルの定義については、Manager に記載されていますが、使用する RDBMS に応じたデータ型で、次のテーブルを作成することでセッション情報を DB に格納することができます。

create table tomcat_sessions (
  session_id     varchar(100) not null primary key,
  valid_session  char(1) not null,
  max_inactive   int not null,
  last_access    bigint not null,
  app_name       varchar(255),
  session_data   mediumblob,
  KEY kapp_name(app_name)
);

 

設定については JNDI Datasource How-To も参考になります。(以前のバージョンの情報となりますが Oracle Application Container Cloud Service: Create a Tomcat Cluster with MySQL Session Persistence も参考になります)

セッションを使用したアプリケーションについては Application Developer’s GuideExample Application でセッションを使用するアプリケーションが含まれていますので、このアプリケーションでセッションのテストを行うことができます。

Share

Written by Masayuki.Ozawa

8月 21st, 2024 at 10:20 pm

Posted in Tomcat

Tagged with

Leave a Reply