かとじゅんの技術日誌

技術の話をするところ

1件開発完了

NDAの関係で具体的なサービス名はかけませんが、明日リリースです。

プロジェクトの構成はMaven2対応Eclipseプロジェクト

hogehoge-project
hogehoge-common
hogehoge-web

です。

hogehoge-commonのほうにDBFlute+S2Daoのプロジェクト。DBFluteのソース群は別プロジェクトにしたほうがソースを閲覧するのが煩雑にならずに済みます。お勧めです。
ごめんなさい。今回はS2BuriDBFluteの組み合わせ間に合いませんでした。次回はぜひ。

で、疲れがひどいというか、休めていないので、ほとんど殴り書きですが、


Teedaで、https <--> http をページごとに切り替えるには、RedirectUrlResolver を独自実装して、ページからリクエストスコープにフラグ値をセットするとよいという話がSeasar userにあったのですが、私のほうはHttps画面遷移用のインターセプターをつくり、PageクラスにAOPを適用し、ページクラスのdoメソッドがどこに遷移しようとしているかチェックして、リクエストスコープにhttpsへの遷移のフラグをセットするようにしました。
これの場合、doメソッドにしか効かないので要注意です。go, jumpはページクラスにメソッドがないのでどうしょうもないです。このあたりがTeeda側で標準サポートとなればうれしいですね。とりえあずは、do, jumpでhttpsに遷移したければ、アンカータグでパラメータ付きならDynamicPropertyでhrefなどをフルパスで組み立てる、でなければstyle="display:none;"な見えないボタンに切り替えてdoメソッドにすればOKです。


であと、S2.4の新機能のdbsessionを使いました。セッションタイマーは自分で実装するとのことなので、S2ChronosのSNAPSHOTでCronTriggerを持つTaskを簡単に使って、そのクラスにDBFluteで生成したS2sessionBhvをDIして、1時間前のセッションを削除する実装をいれました。S2Chronosは、来週中にはHOTR deploy対応+ログの精査をして、RC-1を出してみたいと思います。

@Task
@Component(instance = InstanceType.SINGLETON)
public class S2SessionExpireTask {

	private CronTrigger cronTrigger = new CronTrigger();

	private static Logger log = Logger.getLogger(S2SessionExpireTask.class);

	private transient S2sessionBhv s2sessionBhv;


	public S2SessionExpireTask() {
		cronTrigger.setCronExpression("*/5 * * * *");
	}

	public TaskTrigger getTrigger() {
                   // 5分間隔のCronTriggerをS2Chronosに返します。
		return cronTrigger;
	}

	@NextTask("expireSession")
	public synchronized void initialize() {
               // 実行時間がきたらS2Chronosから呼ばれます。
	}

         // initializeが終わったらNextTaskアノテーションで指定したタスクのメソッドが呼ばれる。
	public synchronized void doExpireSession() {
		S2sessionCB cb = new S2sessionCB();
		Calendar calender = Calendar.getInstance();
		calender.add(Calendar.MINUTE, -60);
		Timestamp expireDate = new Timestamp(calender.getTimeInMillis());
		cb.query().setLastAccess_LessThan(expireDate);
		ListResultBean<S2session> s2sessionList = getS2sessionBhv().selectList(
				cb);
		if (s2sessionList.getAllRecordCount() > 0) {
			getS2sessionBhv().batchDelete(s2sessionList);
		}

	}

	protected S2sessionBhv getS2sessionBhv() {
		return s2sessionBhv;
	}

	public void setS2sessionBhv(S2sessionBhv bhv) {
		s2sessionBhv = bhv;
	}
}