All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.common.handler.threadcontext.ThreadContextHandler Maven / Gradle / Ivy

package nablarch.common.handler.threadcontext;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import nablarch.core.ThreadContext;
import nablarch.fw.ExecutionContext;
import nablarch.fw.Handler;
import nablarch.fw.InboundHandleable;
import nablarch.fw.OutboundHandleable;
import nablarch.fw.Result;

/**
 * スレッドコンテキストに保持される共通属性を管理するハンドラ。
 * 
 * フレームワークには、スレッドコンテキストにユーザID・リクエストID・言語設定を保持する実装が含まれている。
 * これらを有効化するには以下のリポジトリ設定を追加する。
 *   (同様にプロジェクト固有の属性を追加することも可能である。)
 * 
 * <component class="nablarch.common.handler.threadcontext.ThreadContextHandler">
 *   <property name="attributes">
 *     <list>
 *       <!-- ユーザID -->
 *       <component class="nablarch.common.handler.threadcontext.UserIdAttribute">
 *         <property name="sessionKey"  value="user.id" />
 *         <property name="anonymousId" value="guest" />
 *       </component>
 *       
 *       <!-- リクエストID -->
 *       <component class="nablarch.common.handler.threadcontext.RequestIdAttribute" />
 *       
 *       <!-- 言語 -->
 *       <component class="nablarch.common.handler.threadcontext.LanguageAttribute">
 *           <property name="defaultLanguage" value="ja" />
 *       </component>
 *     </list>
 *   </property>
 * </component>
 * 
*/ public class ThreadContextHandler implements Handler, InboundHandleable, OutboundHandleable { /** * 引数に渡されたスレッドコンテキスト属性を管理するハンドラを生成する。 *
     * このメソッドの処理は以下のソースコードと等価である。
     * 
     *     new ThreadContextHandler()
     *         .setAttributes(Arrays.asList(attributes))
     * 
* @param attributes スレッドコンテキスト属性 */ @SuppressWarnings("rawtypes") public ThreadContextHandler(ThreadContextAttribute... attributes) { this.setAttributes(Arrays.asList(attributes)); } /** * デフォルトコンストラクタ */ public ThreadContextHandler() { } /** * {@inheritDoc} *
     * このクラスの実装では以下の処理を行う。
     * 
     *   1. スレッドコンテキスト上の全てのエントリを削除する。
     *   2. このハンドラに登録されている全ての属性について、
     *      キー(ThreadContextAttribute#getKey()の結果)と値(ThreadContextAttribute#getValue()の結果)を
     *      スレッドコンテキストに格納する。
     *   3. 後続のリクエストハンドラに処理を委譲する。
     * 
*/ @SuppressWarnings({ "rawtypes", "unchecked" }) public Object handle(Object input, ExecutionContext ctx) { handleInbound(ctx); return ctx.handleNext(input); } /** * このハンドラが管理する属性のリストを登録する。 * @param attributes このハンドラが管理する属性のリスト * @return このオブジェクト自体 */ @SuppressWarnings("rawtypes") public ThreadContextHandler setAttributes(List attributes) { this.attributes = attributes; return this; } /** このハンドラが管理する属性のリスト */ @SuppressWarnings("rawtypes") private List attributes = new ArrayList(); @Override public Result handleInbound(ExecutionContext context) { assert attributes != null; // スレッドコンテキストに値を設定するまえに、クリア ThreadContext.clear(); for (ThreadContextAttribute attribute : attributes) { ThreadContext.setObject( attribute.getKey(), attribute.getValue(context.getCurrentRequestObject(), context) ); } return new Result.Success(); } @Override public Result handleOutbound(ExecutionContext context) { return new Result.Success(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy