読者です 読者をやめる 読者になる 読者になる

ぶり2.3を適当に読む(2)

エスカフェ構想が発表になっていたので、今後のカテゴリはs2buriburiとしてみます。
以前のはぼちぼち修正する予定。

今日はあまり時間がとれなかったけど、BuriActivitySelectorについて読んでみました。

BuriActivitySelector

実行対象のアクティビティを特定するためのセレクタ
いくつかの実装クラスが用意されている。自前で用意すればアクティビティの決定方法をカスタマイズ可能。
もうすんごい独特な権限制御ががちがちに入る場合とか、ここで対処するのも1つの手段かと思った。
以前はXPDLで表現していたところが、この仕組みでJavaオンリーで再実装された感じかな。

  • DirectActivitySelector
    • 指定されたアクティビティIDを元にピンポイントでアクティビティを特定するセレクタ。アクティビティIDは systemContext.getCallPath().getActivityId() な感じで取得されてる。アクティビティIDが1つだけ指定された場合のみ発動。というか1個以上だと例外発生。SystemContext周りを後で読んでおこう。★
  • ParticipantBuriActivitySelector
    • ロール権限に基づいてアクティビティを特定するセレクタ。別のセレクタで見つかったアクティビティ群をフィルタリングする感じ。実際のロール判定は、別途、仕掛けておいたParticipantProviderが使われる。
  • StartActivitySelector
    • プロセス中の開始アクティビティに当たるアクティビティ群を取得するセレクタ。最初にデータを突っ込む時ようかと。
  • StateActivitySelector
    • たぶんもっとも基本的なセレクタ。登録済みのデータがFinish mode = Manualにひっかかって現在止まっているアクティビティ群を取得する。分岐によって複数アクティビティにデータが所属することがあるので「群」ね。
  • BuriActivityPathFilter
    • ★後で読む。

セレクタの登録

buriSimple.diconやstardardBuri.diconでBuriEngineの実装クラスのコンポーネント定義で、addActivitySelector()メソッドを使って登録してる。
並び順が重要なのかな。

	<component name="BuriSimpleEngine" class="org.seasar.buri.engine.impl.BuriSimpleEngineImpl">
		<initMethod name="addActivitySelector">
			<arg><component class="org.seasar.buri.engine.selector.activityImpl.DirectActivitySelector">
				</component></arg>
		</initMethod>
		<initMethod name="addActivitySelector">
			<arg><component class="org.seasar.buri.engine.selector.activityImpl.StateActivitySelector">
				</component></arg>
		</initMethod>
		<initMethod name="addActivitySelector">
			<arg><component class="org.seasar.buri.engine.selector.activityImpl.StartActivitySelector">
				</component></arg>
		</initMethod>
		<initMethod name="addActivitySelector">
			<arg><component class="org.seasar.buri.engine.selector.activityImpl.BuriActivityPathFilter">
				</component></arg>
		</initMethod>
〜(省略)〜
	</component>

SELECT_FINAL

どこで返してるのかな?SELECT_NEXTオンリーだと全部のセレクタが流れそう...。

BuriProcessSelector

名前だけしかチェックしてないけど、対称性を考えてアクティビティ同じような感じなんだろうなぁと思われ。