« 2015年7月 | トップページ | 2015年10月 »

2015年9月の2件の投稿

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リクエストパラメータを要求された際には予めヘッダに設定していた値を返すようにしています。

2015/09/19

登録していたアプリがGoogle play store(Android Market)から削除された

marketに登録していたアプリ(github)が以下の理由で削除されていました。

Google では定期的な審査の結果、このアプリが他のサービスまたはプロダクトを妨害したり他のサービスまたはプロダクトに不正にアクセスしたりしていると判断しました。(デベロッパー販売 / 配布契約の第 4.4 項への違反)

 

この件によって最も強く確信したことは、流通経路が強く制限されているプラットフォームでの開発は可能な限り回避すべきだ、ということです。

(本アプリはさほど思い入れがあるわけでは無い(開発にさほど時間を費やしていない)のですが、それでも)著作物による自身の表現を制限されたのは非常に不愉快です。
私の著作物が本当に他者のサービス/プロダクトを妨害しているのであれば、それを律する根拠としてはサービス提供者との契約や法律が既に存在するわけで、プラットフォームプロバイダとの契約は余計なものです。
(※ あくまで今の私の状況では余計だ、というだけです。プラットフォームの普及率を利用して収益を増加させよう、といった状況等では妥当な対価である場合もあるでしょう。)

 

幸いにしてAndroidは自由にアプリをインストールすることができるのですが、他に、今私が開発しているもので配布に当たり余計な制約が課せられるものは…と考えると、Chrome Packaged Appsが該当しました。Chrome Packaged Appsはいわゆる野良配布ができないのです。
最近しばしば名前を聞くElectronというのは互換性がありそうなんですが、移行先としてどうなんでしょうね、また調べてみねば…というかいつも通りもうこれもJavaで良いかな…
C#の手習いにWindows Store Appもちょっと考えていたのですが、これも無しですね、やるなら普通にデスクトップアプリを作成します。

 

ところで、アプリの配布を停止させらたことに異議申し立てを行ったら開発者アカウントごと停止させらた、なんて話もあるみたいなので、私のような状況に陥った際に何かアクションを起こそうと考えた場合、慎重に行動したほうが良さそうです。

« 2015年7月 | トップページ | 2015年10月 »

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社では(他の出版社もだが)最近、似たような類いのあまり面白くない書籍が乱出版されていますが、この本は別格だと思うので安心して購入して欲しいと思います。 (★★★★★)

無料ブログはココログ