play 脱离容器的践行者

原创
2014/01/21 13:23
阅读数 308
web应用程序,一般采用流行的ssh等,这些多需要servlet容器,甚至ejb容器的支持。开发完后,系统实际需要ap服务器的支持。虽然也有免费的tomcat可以使用,但一旦系统升级,需要移植到其他ap服务器时,如果使用了ap服务器特有的扩张功能的时候,往往需要花费一定的时间和人力。

因此,如果能够使得web应用程序脱离容器运行,无疑能够提高系统扩展性。
play 正好给我们提供了这样一种选择的机会。

public class Server {
    public Server(String[] args) {
        ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
                Executors.newCachedThreadPool(), Executors.newCachedThreadPool())
    }
    public static void main(String[] args) throws Exception {
        Play.init(root, System.getProperty("play.id", ""));
        if (System.getProperty("precompile") == null)
            new Server(args);
    }

play可以作为一个独立的java程序运行,通过netty来对客户请求做出响应。

当让,play也支持在ap容器中运行。只要一个包裹类ServletWrapper就简单的实现了。

public class ServletWrapper extends HttpServlet implements ServletContextListener {

    protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        Request request = null;
        try {
            Response response = new Response();
            response.out = new ByteArrayOutputStream();
            Response.current.set(response);
            request = parseRequest(httpServletRequest);

            boolean raw = Play.pluginCollection.rawInvocation(request, response);
            if (raw) {
                copyResponse(Request.current(), Response.current(), httpServletRequest, httpServletResponse);
            } else {
                Invoker.invokeInThread(new ServletInvocation(request, response, httpServletRequest, httpServletResponse));
            }
        } finally {
            Request.current.remove();
            Response.current.remove();
            Scope.Session.current.remove();
            Scope.Params.current.remove();
            Scope.Flash.current.remove();
            Scope.RenderArgs.current.remove();
            Scope.RouteArgs.current.remove();
            CachedBoundActionMethodArgs.clear();
        }
    }


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部