[seasar-dev:441] [S2JMS] JMS Message のバインド

Koichi Kobayashi koichik @ improvement.jp
2006年 6月 25日 (日) 01:01:25 JST


小林 (koichik) です.

最近 S2.4 に新しい機能が追加されました.
従来,S2JSF などで Request や Session の属性なんかを
コンポーネントのプロパティにバインドする機能がありましたが,
それが S2 コンテナにより提供されるようになりました.

そこで,S2JMS も従来の @Payload アノテーション等を廃止して,
JMS Message とコンポーネントのバインドは S2 コンテナに
お任せしようかと考えています.
そうすることで,他の S2 ファミリとも一貫性が出てきますし,
これまで以上に S2JMS を利用するために必要な知識が無くなります.

Servlet 非依存とはいえ,ExternalContext の request はほぼ
Serlvet の HttpServletRequest そのままで,Header,Parameter,
Attribute の 3 つの領域を持っています.
このうち Attribute はアプリケーションで自由に使える領域なので,
残り 2 つを JMS Message に対応付けることになります.

そして JMS Message は Header,Property,Payload という 3 つの
領域からなる構造となっています.
1 つ多いわけね.

このうち,主たる情報である Payload を Parameter に割り当てるのが
自然かな,と思います.
Payload は MapMessage の場合に限り名前の付いた属性を持ちますが,
それ以外の時は Payload 自身が属性になります.
そこで,Payload 自身は "payload" という名前でアクセスできることに
しようかと.
そしてこれまで同様,JMS Message 自身を "message" で取れるように
します.これは request Attribute (これも従来同様).

そうなると JMS Message の Header と Property は request の
Header としてアクセスすることになります.
JMS Message の Header 属性は JMS というプレフィックスを持つので,
Property と同じ名前空間で使っても問題はない気もしますが,
JMS で始まるプロパティを持ちたくはないだろうと思うので,従来同様
JMS で始まらない名前でもアクセスできるようにしたいところ.
もし JMS Header からプレフィックスを除いたのと同名の JMS Property が
存在する場合は JMS Property 優先かな.
必要なら @Binding アノテーションでプレフィックス付きの名前を
指定することができるし.

という具合に考えていますがいかがでしょうか?


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"koichik @ improvement.jp"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-dev メーリングリストの案内