【Tomcat】Tomcatのセッション永続化 ~ セッション レプリケーション / DynamoDB編 ~

はじめに

http://blogs.yahoo.co.jp/dk521123/36698011.html
で、MySQLでやったが、今回は「DynamoDB」で行う

DynamoDB については、以下の関連記事を参照のこと。
Amazon DynamoDB
http://blogs.yahoo.co.jp/dk521123/36716365.html
Amazon DynamoDB Local
http://blogs.yahoo.co.jp/dk521123/36725347.html

手順概要

[0] アクセスキー IDと、シークレットアクセスキーを取得する
[1] JDBCドライバを【Tomcat Home】/lib配下に格納
[2] Tomcatの設定を修正
 [2-1] context.xml
 [2-2] server.xml
 [2-3] catalina.properties
 [2-4] web.xml
[3] Tomcatを再起動する
[4] 動作確認

詳細手順

構築環境

 * OS     : Amazon Linux
 * DB     : DynamoDB
 * Java   : JDK1.8
 * Tomcat : Apache Tomcat v8.5.11

 ※ Tomcatは、「/usr/local/tomcat」にインストールされているものとする
Tomcatのインストールは、以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/36706185.html

[0] アクセスキー IDと、シークレットアクセスキーを取得する

 * 以下の関連記事の「アクセスキー IDと、シークレットアクセスキーを取得するには」を参照のこと。
http://blogs.yahoo.co.jp/dk521123/36716365.html

[1] JDBCドライバの設定

 [1-1] JDBCドライバをダウンロード(今回は「aws-dynamodb-session-tomcat-2.0.4.jar」)する
https://github.com/aws/aws-dynamodb-session-tomcat/releases
[1-2] [1-1]のJDBCドライバを【Tomcat Home】/lib配下に格納する

sudo cp ~/aws-dynamodb-session-tomcat-2.0.4.jar /usr/local/tomcat/lib/.

[2] Tomcatの設定を修正

[2-1] context.xml を修正する
AWS
~~~~
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- ★追加★ -->
<Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
      awsAccessKey="yourAccessKey"
      awsSecretKey="yourecretKey"
      regionId="ap-northeast-1"
      endpoint="dynamodb.ap-northeast-1.amazonaws.com"
      table="tomcat_sessions"
      createIfNotExist="true"
      processExpiresFrequency="1"
/>
<!-- ★追加★ -->
</Context>
~~~~

※注意
 * 「regionId」を指定していないと、「us-east-1」(米国東部(バージニア北部))に保存されていた
    (ここで、はまった)
    日本でやっているなら、「ap-northeast-1」(アジアパシフィック (東京))にしておいた方が
    AWS マネジメントコンソールにおいて、デフォルトで表示されるのでよいかと。。。
 * 「region」「endpoint」については、以下のサイトを参照のこと
http://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#ddb_region

[おまけ] Amazon DynamoDB Local(設定は以下の関連記事を参照のこと)
http://blogs.yahoo.co.jp/dk521123/36725347.html
~~~~
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- ★追加★ -->
<Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
      awsAccessKey="yourAccessKey"
      awsSecretKey="yourecretKey"
      regionId="ap-northeast-1"
      endpoint="http://localhost:8000"
      table="tomcat_sessions"
      createIfNotExist="true"
      processExpiresFrequency="1"
/>
<!-- ★追加★ -->
</Context>
~~~~

[2-2] server.xml を修正する
~~~~
【修正前】
<Engine name="Catalina" defaultHost="localhost">

【修正後】
<Engine name="Catalina" defaultHost="localhost"
 jvmRoute="jvm1" backgroundProcessorDelay="1" startStopThreads="-1">
~~~~

[2-3] catalina.properties を修正する
~~~~
#tomcat.util.buf.StringCache.cacheSize=5000

#★追加★
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true
~~~~

[2-4] 【Tomcat】/webapps/【自分プロジェクト】/WEB-INF/web.xml を修正する

「<distributable />」を追記
~~~~
  ・・・略・・・
  <distributable />
</web-app>
~~~~

[3] Tomcatを再起動する

sudo service tomcat restart

[4] 動作確認

[1] 以下の関連記事の「【動作確認用サイト】sessionExam.jsp」を
   「/usr/local/tomcat/webapps/examples」配下に置く
http://blogs.yahoo.co.jp/dk521123/36708242.html
[2] ブラウザのURL欄に以下のURLを入れる
[[http://localhost/examples/sessionExam.jsp]]
[3] DynamoDB内のテーブル「tomcat_sessions」をみてみる
 => [DynamoDB]-[項目]から、データが確認できることを確認する