0

Web サービスで WebServiceContext とメソッド getMessageContext() を使用して、保存用の HttpSession オブジェクトを取得し、セッション値を取得できますか? 次のような Web サービスで HttpSession を使用しようとしていました。

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class DummyWs {

    @Resource
    private WebServiceContext wsContext;

    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name = "name") String name) {
        return "hello " + name;
    }

    @WebMethod(operationName="setValue")
    public void setValue(@WebParam(name = "value") String newValue) {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        session.setAttribute("value", newValue);
    }

    @WebMethod(operationName="getValue")
    public String getValue() {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        return (String)session.getValue("value");
    }

}

@Stateful アノテーションを使用する他の例を見ましたが、これは使用しません。@Stateful アノテーションを使用する必要がありますか? この注釈を使用しないとどうなりますか?

4

1 に答える 1

0

リファレンス実装のzip ディストリビューションstatefulに含まれているサンプルを見ましたか?

サンプルcom.sun.xml.ws.developer.Statefulでは、​​Web サービスの実装でアノテーションを使用し、オブジェクトcom.sun.xml.ws.developer.StatefulWebServiceManager格納するためのクラスを使用します。Java Web サービスはステートレスである必要があるため、オブジェクトのコンテンツをクライアント呼び出し間で永続ストレージに保存する必要があります。

別の方法では、スタレス サービスを優先する必要があります。障害処理、トランザクション セマンティクスとの相互作用は単純です。そして、再利用性が向上します。

于 2013-11-04T14:27:36.127 に答える