S2JMS開発記 - 続・requestスコープの検討
先日からの検討のつづき。自分の理解の整理も含めて書いています。
受信したメッセージをリクエストスコープで登録できるようにするには、HttpServletRequestに突っ込まなくてはなりません。しかし、JMSの場合は必ずしもAPサーバ上で動作するとはかぎらない。そのため、当初はHttpServletRequestの独自実装するという話になっていました(http://d.hatena.ne.jp/koichik/20060103#1136296856 を参照)。
しかし、Seasar2.4からは、ServletAPI依存を無くすため、ExternalContextというインターフェースが登場します。
ExternalContextはこんな感じ。
public interface ExternalContext { Object getRequest(); void setRequest(Object request); Object getResponse(); void setResponse(Object response); Object getSession(); Object getApplication(); void setApplication(Object application); }
基本的には、この実装クラス(JMSExternalContext)と、HttpServletRequestに代わるリクエスト(JMSRequestとか)を用意して、そこにJMSメッセージを突っ込めば良いはず・・・。
しかし、ここで問題発生。スコープがリクエストの場合、実際にコンポーネントを生成する org.seasar.framework.container.deployer.RequestComponentDeployer を見ると(実はこのあたりを調べたいがために、S2Containerのクラス図を書いてみたりしたのだ・・・)、実装が HttpServletRequest に依存していることが判明(前回と同一リクエストだったら同じインスタンスを返す・・・というあたりが)。
やはり、HttpServletRequest の独自実装をつくるべきなのか・・・?