Uploaded image for project: 'S2Container'
  1. S2Container
  2. CONTAINER-29

FileSystemComponentAutoRegisterの振る舞い(仕様の誤解かも)

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Minor Minor
    • 2.4.11
    • Affects Version/s: 2.4.7
    • Component/s: S2Container
    • None

      FileSystemComponentAutoRegister を、たとえば以下のように使うとする。

      <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
      	<property name="instanceDef">
      		@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
      	</property>
      	<property name="autoNaming">
      		<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
      	</property>
      	<initMethod name="addClassPattern">
      		<arg>"a.b"</arg>
      		<arg>"^.*Impl$"</arg>
      	</initMethod>
      	<initMethod name="addClassPattern">
      		<arg>"a.b.c"</arg>
      		<arg>"^.*Default$"</arg>
      	</initMethod>
      	<initMethod name="registerAll"></initMethod>		
      </component>
      

      このケースでは、

      • a.bおよびその配下のパッケージの なんとかImpl が登録される
      • a.b.cおよびその配下のパッケージの なんとかDefault が登録される
        ように思われるのだが、実際には a.b.cおよびその配下のパッケージのなんとかDefaultのregisterは2回走る。

      バグかどうかはハッキリしないのでコミッタの方の判断にお任せしますが、以下のように考えました。

      • FileSystemComponentAutoRegister}}の {{registerAll は {{ClassPattern}}の繰り返し(for-each)処理をしている
      • ClassTraversal#traverseFileSystem から ClassHandler として {{FileSystemComponentAutoRegister}}がコールバックされる
        • ClassHandler}}としての実装は {{AbstractComponentAutoRegister に存在
      • AbstractComponentAutoRegister#processClass は自身の中でもう一度 {{ClassPattern}}に対して繰り返し(for-each)処理をしている
        • ここが問題では?
      • ClassPattern}}についての繰り返し処理は 最初の {{registerAll だけにしたほうがいいのでは? (考察できていませんが)

      如何でしょうか。

            Assignee:
            koichik koichik
            Reporter:
            tanigon tanigon
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: