ScopeInterceptorについて

ScopeInterceptorを使うとsessionスコープやapplicationスコープのプロパティを簡単に使うことができるようだ。

次のように struts.xml に記述すると

<action name="scopetest" class="ScopeTestAction" method="doCountup">
  <interceptor-ref name="transact">
    <param name="scope.session">counter</param>
  </intercetor-ref>
  <result>/sample.jsp</result>
</action>

アクションが呼ばれる前に session から counter を取り出し、 counter プロパティのsetterが呼ばれる。そしてアクションから戻ると getterでcounterを取得しsession の counter を更新してくれる。だからアクション中で単純にcounterを更新してあげればアプリケーションは殆ど意識しないでsessionスコープの変数が扱える。またソースを見ると更新の競合を調整するロックもやってくれているようだ。
後でもう少し調査することにする。