JAX-RPC のセッションはどのように保持するのでしょうか?

JAX-RPC エンドポイントセッションの保持はクライアントからはできません。セッションに関してクライアントとサーバーにはそれぞれ役割があり、それがどのように設定されるかはあまり明確ではありません。

状況としては、クライアントはサービスの呼び出しを行い、サーバーはそれに反応して接続のクッキーを設定します。その後、クライアントは個々の呼び出しに、そのクッキーを送り返し、サーバーはそれをチェックします。

JAX-RPC スタブは通常送り返されてきたクッキーを無視します。
SESSION_MAINTAIN_PROPERTY が true に設定されている場合に、サーバーが設定したクッキーをそのまま送り返します。

サーバー側では、クッキーを設定するクラスとメソッドにフィールドを1つ追加する必要があります。エンドポイントは javax.xml.rpc.server.ServiceLifecycle. を実装し、 destroy() (空でも良い) と init(Object context) の 2 つのメソッドが追加されている必要があります。

ServletEndpointContext オブジェクトをエンドポイントに追加します; 例: myServletEndpointContextinit(Object context) メソッドは次のように設定できます。

myServletEndpointContext = (ServletEndpointContext) context;

これ以降、ビジネスメソッドは myServletEndpointContext.getHttpSession() を使って HttpSession にアクセスすることができます。セッションがまだ無い場合は、最初に getHttpSession を呼び出したときに作られます。

このモデルだと、クライアントが呼び出した全てのメソッドはセッションを取得したりセッションのアトリビュートを設定したり、値を取得したりといったことができます。そしてそれ以降、クライアントは同じクッキー情報を送り返します。

戻る


日本語翻訳: shioda

英文 (翻訳したバージョン: 13)