天天看點

Burlap中hessian協定研究(四)協定的”生命周期“

服務方法在使用者請求調用處理使用者的資訊

    publicvoid service(ServletRequest request, ServletResponse response)

        throws IOException, ServletException

    {

        HttpServletRequest req = (HttpServletRequest)request;

        HttpServletResponse res = (HttpServletResponse)response;

        由此處代碼可以知道用戶端請求必須使用post方式,否則報錯500,顯示必須使用post方式發送

        if(!req.getMethod().equals("POST"))

        {

            res.setStatus(500, "Burlap Requires POST");

            PrintWriter out = res.getWriter();

            res.setContentType("text/html");

            out.println("<h1>Burlap Requires POST</h1>");

            return;

        }

        使用線程鎖用于處理多個使用者的操作

synchronized(_service)

        {

            建立遠端用戶端通路的骨架

            if(_skeleton == null)

                _skeleton = new BurlapSkeleton(_service);

            String serviceId = req.getPathInfo();

            String objectId = request.getParameter("ejbid");

            設定服務的處理對象的方法

            if(_serviceinstanceof Service)

                ((Service)_service).setRequestObject(request, serviceId, objectId);

            java.io.InputStream is = request.getInputStream();

            java.io.OutputStream os = response.getOutputStream();

            将接受到的請求資訊和響應資訊轉換

            BurlapInput in = new BurlapInput(is);

            BurlapOutput out = new BurlapOutput(os);

            try

            {

                  調用響應的骨架的方法

                _skeleton.invoke(in, out);

            }

            catch(Throwable e)

            {

                thrownew ServletException(e);

            }

        }

    }

    private Class _serviceClass;

    private Object _service;

    private BurlapSkeleton _skeleton;

    privateboolean_isService;

}

 下面提供關于Burlap服務類的源代碼

 此類定義的資訊類似一個Burlap的”生命周期“!!!!!!!

 關于此處的"生命周期"純屬筆人個人看法?有什麼不妥之處請不惜賜教??謝謝!

服務代理工廠類

publicclass BurlapProxyFactory     implements ObjectFactory

備注此類打開遠端連接配接URLConnection使用将使用者名和密碼一起使用base64加密發送到服務端。

遠端模型類BurlapRemote類必須知道URL 和type

服務類:此類類似HttpServlet中接口類Servlet

package com.caucho.services.server;

import javax.servlet.*;

 服務類接口的

publicinterface Service

{

     在Servlet啟動時初始化一次

    publicabstractvoid init(ServletConfig servletconfig)

        throws ServletException;

   在用戶端每一次請求時調用此方法處理服務資訊

    publicabstractvoid setRequestObject(ServletRequest servletrequest, String s, String s1)

        throws ServletException;

    在服務銷毀時使用

    publicabstractvoid destroy();

}

繼續閱讀