AWS Elastic Beanstalk を使う その11
色々環境が揃ってきたので、Tomcat の Session Persistence を拡張しようと思った感じですw。
まずはじめに Tomcat のソースをダウンロードしてEclipseにインポートしてビルドに必要なライブラリを追加します。
次に参考にするStoreクラスのソースを見ます。
FileStoreとJDBCStoreが参考になりますね。
んじゃ、これを参考に SimpleDBStoreを作りましょう。
FileStore と JDBCStore は StoreBase抽象クラスを継承してStoreインタフェースを実装しています。同じようにクラス定義します。
雛形はこんな感じかな。
package jp.cm.aws.tomcat.session;
import java.io.IOException;
import org.apache.catalina.Session;
import org.apache.catalina.Store;
import org.apache.catalina.session.StandardSession;
import org.apache.catalina.session.StoreBase;
public class SimpleDBStore extends StoreBase implements Store{
@Override
public int getSize() throws IOException {
return 1;
}
@Override
public String[] keys() throws IOException {
String[] ks = {"keykeykey"};
return ks;
}
@Override
public Session load(String id) throws ClassNotFoundException, IOException {
System.out.println("load");
StandardSession session =
(StandardSession) manager.createEmptySession();
return session;
}
@Override
public void remove(String id) throws IOException {
System.out.println("remove");
}
@Override
public void clear() throws IOException {
System.out.println("clear");
}
@Override
public void save(Session session) throws IOException {
System.out.println("save");
}
}後はここにSessionの永続化と復元の処理を入れればOKのはず。
続きまして、上記の雛形がちゃんと動くか確認します。
アプリケーションフォルダの下にMETA-INFフォルダを作ってcontext.xmlを作ります。中身はこんな感じ。
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="${catalina.home}/webapps/simpledb"
path="/simpledb"
reloadable="true"
source="org.eclipse.jst.j2ee.server:test"
backgroundProcessorDelay="1" >
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true"
duplicates="0"
saveOnRestart="true"
maxActive="0"
maxActiveSessions="0"
minIdleSwap="0"
maxIdleSwap="0"
maxIdleBackup="0"
maxInactiveInterval="0"
sessionCounter="0" >
<Store className="jp.cm.aws.tomcat.session.SimpleDBStore"/>
<!--
<Store className="org.apache.catalina.session.FileStore"
directory="${catalina.home}/logs/sessions" >
</Store>
-->
<!--
<Store className="org.apache.catalina.session.JDBCStore"
checkInterval="1"
connectionURL="jdbc:mysql://mydb.csnpjudtgu1o.us-east-1.rds.amazonaws.com:3306/awstest"
driverName="com.mysql.jdbc.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session" />
-->
</Manager>
</Context>
このままだとSimpleDBStoreクラスが見つからないと怒られるので、
TOMCAT_HOME/libにクラスをコピーして置きます。jar化してもOK。
さて、無事にSession Persistenceをしてくれるカスタムクラスの作成に成功しました〜。
ちゃんと動いているか確認してみましょう。
このアプリにひとつjspを作って以下のようにセッションに書き込みをしてみます。
session.setAttribute("key1","value1");このjspをブラウザから叩くと、以下のようにTomcatのログが出ました!!
2011/01/23 22:27:44 org.apache.catalina.session.PersistentManagerBase swapIn
あとは、SimpleDBにセッション情報を書き込む処理だけですね。
これは、AWS SDK for Java をダウンロードしてlibにjarを追加してごにょごにょすればすぐにできるはず。
今日はここまで。