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を追加してごにょごにょすればすぐにできるはず。
今日はここまで。