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

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

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 1.2
    • Fix Version/s: 1.2.1
    • Labels:
      None

      Description

      [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なんじゃないかなあ、という思い。

        Attachments

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: