Uploaded image for project: 'S2Velocity'
  1. S2Velocity
  2. VELOCITY-9

race condition時、(toolbox.xml形式で利用する場合に)TooManyRegistrationRuntimeExceptionが発生することがある

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Critical Critical
    • 1.2.1
    • Affects Version/s: 1.2
    • None

      [Seasar-users:14329] より

      うえしんさんご指摘ありがとうございます。

      こんにちは。
      うえしんです。
      
      以前よく使わせていただいていて、ここしばらくは離れていたのですが、
      久しぶりに更新されたということで試してみました。
      やっぱりツールにコンポーネントがインジェクトされるのは便利です。
      
      さて、早速で申し訳ありませんが、
      (おそらく)applicationスコープ以外でtoolbox.xmlに登録されているツールで
      
      org.seasar.framework.container.TooManyRegistrationRuntimeException
      
      を発生する場合があることを確認しました。
      
      具体的には
      
      AutoRegisteringS2ServletToolInfo.javaの60行目(ツールのコンテナへの登録)
      
      が複数回呼ばれる可能性があります。
      (webapp起動直後にほぼ同時に複数のリクエストがあった場合など)
      これにより、同名のコンテポーネントが複数回登録され、
      TooManyRegistrationRuntimeExceptionを発生させることになります。
      (Eclipseなどで50行目~60行目あたりでサスペンドさせると再現できます。)
      
      回避策としましては、
      60行目のregister前後をsynchronizedなどでブロックさせ、
      再度 container.hasComponentDef で登録確認を行うなどが考えられると思います。
      
      ご確認、よろしくお願いします。
      

      手順:
       再現確認後、指摘行あたりを修正。
       雰囲気としては synchronizedなんじゃないかなあ、という思い。

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

              Created:
              Updated:
              Resolved: