import net.liftweb.http._ import net.liftweb.common._ import com.google.appengine.api.datastore._ object SessionCleaner { // Iteratorのimplicit conversionは定義されていないようなので自前で定義。 implicit def j2s[A](j: java.util.Iterator[A]) = new scala.collection.jcl.MutableIterator.Wrapper[A](j) private lazy val DSS = DatastoreServiceFactory.getDatastoreService def execute(): Box[LiftResponse] = { var count = 0 try { val q = new Query("_ah_SESSION") q.addFilter("_expires", Query.FilterOperator.LESS_THAN_OR_EQUAL, System.currentTimeMillis) DSS.prepare(q).asIterator.foreach(e => {DSS.delete(e.getKey); count = count + 1}) } finally { println(count + " sessions deleted.") } Full(OkResponse()) } }
Boot.scalaのdef boot内にはこんな感じ。
LiftRules.statelessDispatchTable.append { case Req("cron" :: "sessionCleaner" :: Nil, _, _) => () => SessionCleaner.execute() }
こんなことしなくても標準でSessionCleanupServlet てのがあったんですね…
返信削除参考:http://d.hatena.ne.jp/nowokay/20100209