package sample.context.actor;
/**
* スレッドローカルスコープの利用者セッション。
*/
public class ActorSession {
private ThreadLocal<Actor> actorLocal = new ThreadLocal<>();
/** 利用者セッションへ利用者を紐付けます。 */
public ActorSession bind(final Actor actor) {
actorLocal.set(actor);
return this;
}
/** 利用者セッションを破棄します。 */
public ActorSession unbind() {
actorLocal.remove();
return this;
}
/** 有効な利用者を返します。紐付けされていない時は匿名者が返されます。 */
public Actor actor() {
Actor actor = actorLocal.get();
return actor != null ? actor : Actor.Anonymous;
}
}