« 登録していたアプリがGoogle play store(Android Market)から削除された | トップページ | Welding GWT-RPC with CDI @ConversationScoped »

2015/09/21

GWT-RPCでCDI @ConversationScoped を成立させる

Here is English version.

要約

Conversationを伝播させるためには、リクエストパラメータにconversation IDを設定してやる必要が有ります。
しかし、GWT-RPCではユーザがリクエストボディ部を操作することは想定されておらず、困難なようでした。
そこで、クライアントからはヘッダ部にconversation IDをセットしておき、サーバサイドでその値をリクエストパラメータとして取得できるよう前処理を行うことにしました。
(これは、CDI処理前にサーブレットフィルタを用いリクエストを改変することで実現しています。)
この結果、GWT-RPCでもCDI @ConversationScoped機能を用いることができるようになりました。

ソースコード(github)

説明

試した環境は以下のとおりです。
  • Java1.8.0u60
  • Wildfly10Beta2(Weld2.3.0.CR1)
  • GWT(Google Web Toolkit) 2.7.0
long-runningな対話スコープを伝播したい場合、リクエストパラメータにキー"cid"(conversation IDの略でしょうか)の情報を含める必要があるそうです。
CDI1.2 spec:
6.7.4. Conversation context lifecycle
The long-running conversation associated with a request may be propagated to any Servlet request via use of a request parameter named cid containing the unique identifier of the conversation.
Weld doc:
5.3.2. Conversation propagation
We can force the conversation to propagate with a non-faces request by including the unique identifier of the conversation as a request parameter. The CDI specification reserves the request parameter named cid for this use.


ソースコードを眺めたところ、リクエストパラメータからcidを取得しているのは ConversationContextActivator であることがわかり、またドキュメントの以下の記述から、この処理を行う前にユーザープログラムで前処理を挟めることがわかりました。 "CDI Conversation Filter"という名前のフィルタの前に、独自のフィルタを設定しそこで処理すれば良いわけです。
CDI1.2 spec:
6.7.4. Conversation context lifecycle
The container provides a filter with the name "CDI Conversation Filter", which may be mapped in web.xml, allowing the user alter when the conversation is associated with the servlet request.
また、Weldドキュメントの 5.3.4. CDI Conversation filter, A.2.3. CDI Conversation Filter, FAQ: Why does Weld set character encoding of an HTTP request/response body to ISO-8859-1? で言及されています。

この機能を使い、クライアントで作成するメッセージはcidリクエストパラメータを含まないが、 Weldから要求された際にはcidを渡せる、ということが可能になります。


冒頭で示したソースコードについて説明します。
GWTクライアント側では、RpcRequestBuilderを用いてヘッダにConversation IDを設定するようにしています。
サーバ側では、web.xmlでCDI Conversation Fiterより前にカスタムフィルタを適用する旨を定義し、 このフィルタの中でHttpServletRequestWrapperを利用してcidリクエストパラメータを要求された際には予めヘッダに設定していた値を返すようにしています。

« 登録していたアプリがGoogle play store(Android Market)から削除された | トップページ | Welding GWT-RPC with CDI @ConversationScoped »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/18902/62323463

この記事へのトラックバック一覧です: GWT-RPCでCDI @ConversationScoped を成立させる:

« 登録していたアプリがGoogle play store(Android Market)から削除された | トップページ | Welding GWT-RPC with CDI @ConversationScoped »

other sites

  • follow us in feedly
  • github
  • stackoverflow

ソフトウェアエンジニアとして影響を受けた書籍

  • Christain Bauer: HIBERNATE イン アクション

    Christain Bauer: HIBERNATE イン アクション
    理論と実践が双方とも素晴らしい製品であるHibernate。本書はそのプロダクトを書名に冠していますが、Hibernateを使うつもりがなく、ORマッピングの解説書として読むにしても十分な良書です。Second EditionとしてJava Persistence With Hibernateという書籍も出版されていますが、残念ながら現在のところ 和訳はされていません。-インアクションは2.xの、Java Persistence-は3.1の頃のものなので、最新版とはちょっと違うところもあることに注意。 (★★★★★)

  • アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版

    アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版
    クライアント/サーバシステムを構築する上で必要となる知識が総論されてます。Web技術者も、フレームワーク部分を開発するのであれば必読。 (★★★★★)

  • Joel Spolsky∥著: ジョエル・オン・ソフトウェア

    Joel Spolsky∥著: ジョエル・オン・ソフトウェア
    前述の書籍「ソフトウエア開発プロフェッショナル」をより砕いたもの、という感じでしょうか。 前書きではプログラマでなくSE向けの本のように書かれているが、プログラマが読んでも面白い本であると思われます。 SEになった新人(あるいはそういう会社に入る/入りたての人)にとっては、これからどういったことが仕事を遂行していく上で起こりえるのか、どのように考えて行なっていけばいいのか決定する助けになると思います。 元は″Joel on Software″というブログの記事で、web上でも一部日本語で読めます。 http://japanese.joelonsoftware.com/ (★★★)

  • ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか

    ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか
    問題解決(一昔前のの流行語で言うところの『ソリューション』)能力は、システムエンジニアのスキルとして備えるべきもののうちのひとつです。しかし、これは難しい。学校で出されるテストと違い、唯一の、(問題提出者が想定している)解を求めるだけが「問題解決」では無いからです。そもそも、何が問題なのか、それは本当に問題なのか、それは本当に解決すべき問題なのか、その問題解決方法は正しいのか、などを解決しなければ、「その解は正しいのか」に辿りつくことができません。この本の最も良いところのひとつは、本があまり厚くないこと。すぐに読めるし、何回も読み返す気になるでしょう。 (★★★★★)

  • スティーブ・マコネル: ソフトウエア開発プロフェッショナル

    スティーブ・マコネル: ソフトウエア開発プロフェッショナル
    コードコンプリートで有名なスティーブマコネルの著書。新人SEに読んで欲しい。個人として業界の中でどうあるべきか、組織としてどうあるべきか、SEのプロ意識とは?SEの心構え概論、といったところでしょうか。また、業界における資格の重要性についても説かれています。この業界では資格が特に軽んじられる傾向がありますが、この傾向はどんな弊害をもたらすのか、将来的にこの業界は資格に対してどのような姿勢で臨んでいくべきなのか。日経BP社では(他の出版社もだが)最近、似たような類いのあまり面白くない書籍が乱出版されていますが、この本は別格だと思うので安心して購入して欲しいと思います。 (★★★★★)

無料ブログはココログ