diff --git a/src/main/scala/plugin/Sessions.scala b/src/main/scala/plugin/Sessions.scala new file mode 100644 index 0000000..7398c9a --- /dev/null +++ b/src/main/scala/plugin/Sessions.scala @@ -0,0 +1,11 @@ +package plugin + +import slick.jdbc.JdbcBackend.Session + +/** + * Provides Slick Session to Plug-ins. + */ +object Sessions { + val sessions = new ThreadLocal[Session] + implicit def session: Session = sessions.get() +} diff --git a/src/main/scala/servlet/PluginActionFilter.scala b/src/main/scala/servlet/PluginActionFilter.scala index 169bb0e..1ef7642 100644 --- a/src/main/scala/servlet/PluginActionFilter.scala +++ b/src/main/scala/servlet/PluginActionFilter.scala @@ -10,6 +10,7 @@ import util.Keys import app.Context import plugin.Results._ +import plugin.Sessions._ class PluginActionFilter extends Filter with SystemSettingsService { @@ -27,24 +28,28 @@ // Create Context val loginAccount = req.getSession.getAttribute(Keys.Session.LoginAccount).asInstanceOf[Account] implicit val context = Context(loadSystemSettings(), Option(loginAccount), req) - - // Invoke global action - action(req, res, context) match { - // TODO to be type classes? - case x: String => - res.setContentType("text/plain; charset=UTF-8") - res.getWriter.write(x) - res.getWriter.flush() - case x: Html => - res.setContentType("text/html; charset=UTF-8") - // TODO title of plugin action - res.getWriter.write(html.main("TODO")(x).body) - res.getWriter.flush() - case Redirect(x) => - res.sendRedirect(x) - case Fragment(x) => - res.getWriter.write(x.body) - res.getWriter.flush() + sessions.set(Database.getSession(req)) + try { + // Invoke global action + action(req, res, context) match { + // TODO to be type classes? + case x: String => + res.setContentType("text/plain; charset=UTF-8") + res.getWriter.write(x) + res.getWriter.flush() + case x: Html => + res.setContentType("text/html; charset=UTF-8") + // TODO title of plugin action + res.getWriter.write(html.main("TODO")(x).body) + res.getWriter.flush() + case Redirect(x) => + res.sendRedirect(x) + case Fragment(x) => + res.getWriter.write(x.body) + res.getWriter.flush() + } + } finally { + sessions.remove() } }.getOrElse { chain.doFilter(req, res) @@ -52,4 +57,4 @@ } } -} \ No newline at end of file +}