【Thorontail】セッションは?

JAX-RSでググって
(1)21 HTTPセッションを使用したステートフルJAX-WS Webサービスのプログラミング
を見つけ
通常、JAX-WS Webサービスはステートレスです。
という、当然のことが書いてあった。
ログイン情報とか、前に操作したページに履歴とかどうしようかと思ってたら、
当然の様に「しかし、HTTPセッションを使用して複数のWebサービス呼出しにわたって状態を保持すれば、」
とあったので、そのまま・・・
@Resource で、 コンテクストをマップしてみたが
NullPointerException 敗退。
よく見ると、

@WebService
という、別系統のアノテーション(つまりJAX-WS)の場合に有効な手段だったようだ。

JAX-RSかJAX-WSなのかで、アノテーションの書き方が全く違ってしまう。
Javaも使われて長くなってきたから、派閥(あるいは黒歴史)の垣根が酷いなぁ~(合掌
ま、同じアノテーションだったら、Importsのクラスパスのミスでハマりそうだけどね。
暫く探し続け、やっとRSの方があった
(2)[Java]JAX-RSはセッションを自動で開始しない
を見つけた。
以前メソッドのパラメータにHttpServletRequest requestを置いたら、別系統のメソッドと判定されInvokeに失敗してヒドイ目にあったが、アノテーションでインジェクションすればよかったらしい。
メソッドのパラメータに@Context HttpServletRequest requestを置いてお願いしてみたら、GETできた。
後は、
String data = session.getAttribute(“何たら”);
で取得し、
session.setAttribute(“難たら”, データ);
で、最新の内容に更新すればいいから、楽で良かった。
でも、ログイン情報とか、操作履歴とか、その辺のWebサービスはパラメータに@Context HttpServletRequest requestを置かないといけないことになった。
また、この記事の通りに、
String id = request.getSession().getId();
return Response.ok(戻り値).cookie(new NewCookie(“JSESSIONID”, id)).build();
と、やっておけば、クライアントからもIDが見れるし、Webサーバーを並列化した時にも、DBにセッション(+アカウント情報)・テーブルを置けば・・・なんとかなるのかもしれない。
 
おかしいな?
マイクロ・サーバーでお手軽なThorontailでウハウハのハズだったのに、
どんどん、変な深みにはまっていく。
 
既に、WEBサーバーと云うよりも、
ブラウザから観れば、
mavenのリポジトリィから好き勝手にパッケージを見繕ってくっ付けられるHTTPプロトコル・インタープリター
な気がしてきた。
HttpServletRequestとHttpServletResonseクラスがベタで使いやすかったらよかったのになぁ・・・
いや、listen()を直で呼び出すと、取りこぼししやすいのが、本当の問題点な気がする。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA