あるディレクトリで、その場で即席のWebサーバ立ちあげられたら便利だなと思いました。
PHPでも5.4になって組み込みサーバが使える様になりましたが、PEARなどの外部ライブラリの連携が最近はどうなってるか知らないので、ちょっとスルー。せっかくなのでGroovyエコシステムが使えたほうが楽しそうなので、やっぱりGroovy + Jettyだよね。
http://php.net/manual/ja/features.commandline.webserver.php
Jettyの前に、winstoneという軽量なServletContainerもありました。が、2008年で開発が止まってるのが微妙。
去年くらいにJetty8をGroovyで使ったことがあるが、GrapeでDLしたのがそのままロードされなくて、".ivy"以下にDLされたXMLファイルか何かを弄ってようやく"@Grab"出来た記憶が。
でも、またバージョンアップされてて、試したら今度はそんなバッドノウハウいらなかった。
groovyserv使うと、場合によってはgroovyserver側にJettyインスタンスが残ってしまう可能性を考慮して、ちゃんとシャットダウンシーケンス作りたいよね。Server.stop()とかServer.setGracefulShutdown()呼べば良さそう。
別ポート番号でHTTP受け付けて、そこからServer.stop()呼べばイインジャネ?
結局のところ、別ポート立ちあげなくとも、"__stop__"という特殊なURLにShutdown専用のServlet紐付けて、そこからServer.stop()呼ぶスレッド(wait中にしとく)をnotify()すればいいよね、ということでfix.
→というわけで Groovy/真・超お手軽Web開発(Groovy-1.8 + Jetty8, 201304版) をUP。そろそろGroovyServletでのサクサク開発のバリエーションでっち上げるの、飽きてきた・・・。4バージョン目じゃなイカ。
あと今更だけれど、SessionってThreadSafeだっけ?という話:
→Servlet2.5位で微妙に仕様が変わってるらしいが、いずれにしても、うっかりするとスレッドセーフでなくなる可能性が高い状況。基本スタンスとしてスレッドセーフ「でない」ものとして扱い、必要に応じて何かしらラッパーを挟む必要がありそう。
コメント