[Seasar-user:11973] [s2container] 複数のコンポーネント定義を取得する方法

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 12月 7日 (金) 17:13:44 JST


関修康です。

コンポーネント定義を取得する際に、
特定のパッケージ以下の定義 || 特定の命名規則に従った定義 を
取得する方法はありますか??

findComponentDefs(componentKey)
findAllComponentDefs(componentKey)

これらの componentKey を正規表現や、共通インターフェースを渡す方法
等を試しましたが出来ませんでした。

やりたいことは、たいした機能では無いのですが、
RMIサーバーを起動した後に、何がサービスとして立ち上がったかを
分かりやすいように表示させたいと考えています。

// RMIサーバー起動
GenericS2ContainerInitializer initializer = new GenericS2ContainerInitializer();
initializer.setConfigPath("app.dicon");
initializer.initialize();

// ルートコンテナ取得
container = SingletonS2ContainerFactory.getContainer();

// 〜Serviceと言う名前のコンポーネントか、〜〜.service パッケージ以下の
// コンポーネント定義 を取得したい
ComponentDef[] componentDefs = container.findAllComponentDefs("〜Service");

// RMIのサービスメソッドを明示的に表示
System.out.println(componentDefs.length + " 個のサービスが開始されました。" );
for (ComponentDef def : componentDefs) {
	System.out.println( " * " + def.getComponentName() );
}

[Seasar-user:6319] コンテナに登録されているPOJOなクラスにインジェクトしたい
に同じような話題が有り、s2containerのfindAllComponentDefsを
以下のような形に編集する形が詳細されていましたが、
ちょっと敷居が高いかなぁと思いまして、質問させて頂きました。

final Pattern pattern = Pattern.compile(".*Job");
final List l = new ArrayList();
Traversal.forEachComponent(container,
  new Traversal.ComponentDefHandler() {
    public Object processComponent(ComponentDef componentDef) {
      Class clazz = componentDef.getComponentClass();
      if (clazz != null && p.matcher(clazz.getName()).matches) {
        l.add(componentDef);
      }
      return null;
    }
  });

以上、宜しくお願い致します。




Seasar-user メーリングリストの案内