Wicket
  1. Wicket
  2. WICKET-2118

Application adds a ComponentInstantiationListener that I don't want and can't remove

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.4-M3
    • Fix Version/s: 1.4-RC3
    • Component/s: wicket
    • Labels:
      None
    • Environment:
      OS X 10.5.6, Java 1.5.0_16

      Description

      I am writing a unit test that requires that I instantiate a Component. When I instantiated the Component, I discovered that it requires an Application attached to the current thread. No problem: I instantiated the Application and set it in the thread using Application.set.

      However, at this point I saw the following error: "java.lang.IllegalStateException: you can only locate or create sessions in the context of a request cycle."

      The problem is that Application, in its constructor, adds a component instantiation listener that delegates the discovery of the authorization strategy to the session, and if the session isn't present, it wants to create one. I tried setting up a session, but that requires a request cycle, which requires a request and response, etc.

      I see two issues here:

      1. Application creates a component instantiation listener that cannot be removed. The only way to remove it is to have a reference to the listener and pass it to removeComponentInstantiationListener, but the listener is created anonymously inside the Application constructor.

      This could be solved by creating a method called something like initializeDefaultComponentInstantiationListeners that a subclass could override with a no-op.

      2. The listener that Application creates always creates a Session, even though Session's default implementation of the method that Application calls just delegates back to Application.

      This issue could be resolved by the solution to #1, since applications that know that they're not going to override the authorization strategy on a per-session basis could add an authorization listener that didn't create a session.

        Activity

        No work has yet been logged on this issue.

          People

          • Assignee:
            Juergen Donnerstag
            Reporter:
            Willis Blackburn
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development