configファイルとか
S2Struts限定ではなくてStrutsでもOKだと思うけど、、、
TilesにはReloadActionがあるので、マネしてstruts-config.xmlとかpropertiesファイルとかを読み込む(Reloadする)Servletを作ってみた。
とりあえず、うまく動いてそう。
public class ReloadActionServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ActionServlet actionServlet = this.getActionServlet(); response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { this.destroyRequestProcessors(); actionServlet.destroy(); actionServlet.init(); writer.println("OK"); } catch (Exception e) { writer.println("FAIL - " + e.toString()); e.printStackTrace(writer); } writer.flush(); writer.close(); } private ActionServlet getActionServlet() { return (ActionServlet) this.getServletContext().getAttribute( Globals.ACTION_SERVLET_KEY); } private void destroyRequestProcessors() { ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (!(value instanceof RequestProcessor)) { continue; } RequestProcessor processor = (RequestProcessor) value; processor.destroy(); getServletContext().removeAttribute(name); } } }
もしかして設定ファイルはrequestのたびに読み込んですぐに反映するより、修正したら一発URLをたたいてもらうほうがストレスが少ないのかも。。。
#よく考えたら、こういう再読み込みのものってすでにたくさん作られてそうだなー
#自分が気づかなかっただけか。。。