NDAの関係で具体的なサービス名はかけませんが、明日リリースです。
プロジェクトの構成はMaven2対応Eclipseプロジェクト
hogehoge-project
hogehoge-common
hogehoge-web
です。
hogehoge-commonのほうにDBFlute+S2Daoのプロジェクト。DBFluteのソース群は別プロジェクトにしたほうがソースを閲覧するのが煩雑にならずに済みます。お勧めです。
ごめんなさい。今回はS2BuriとDBFluteの組み合わせ間に合いませんでした。次回はぜひ。
で、疲れがひどいというか、休めていないので、ほとんど殴り書きですが、
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; } }