ICEfaces
  1. ICEfaces
  2. ICE-11288

Unnecessary beans created when using @WindowDisposed with @ViewScoped Beans

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.3.0.GA_P02
    • Fix Version/s: EE-4.2.0.GA, EE-3.3.0.GA_P05
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      jsf 2 icefaces-ee-3.3.0.GA_P02-hsdg-12

      Description

      Customer is using patched version of P02.
      The attached beans and xhtml page need to be added to @WIndowDisposed test to be used with profiler to show additional instances of @ViewScoped Beans that are being created when used in this manner.

      See attached PDF that explains the problem and how to reproduce with these beans and xhtml page.
      1. JSF_ViewBeansMap_issue_when_WindowDisposed_used.pdf
        1.09 MB
        Judy Guglielmin
      2. SetActiveViewMapsSizeSessionListener.java
        2 kB
        Judy Guglielmin
      3. ViewBean.java
        2 kB
        Judy Guglielmin
      4. viewScopeWindowTest.xhtml
        0.4 kB
        Judy Guglielmin
      5. WindowsGlobalCounter.java
        0.4 kB
        Judy Guglielmin

        Activity

        Hide
        Mircea Toma added a comment - - edited

        Okay, there are two issues here.

        The first issue is still triggered by JSF/Mojarra, when a ViewExpiredException is thrown (for a request that targets a discarded view). Mojarra is rendering a debug page to show what when wrong but doing so it will evaluate the EL expressions found in the page which in turn will trigger the creation of the beans referenced by the EL expressions.
        The debug page is not used when the application runs in Production mode so the beans are not instantiated anymore on ViewExpiredException.

        The second issue is in ICEfaces code. In EnvUtils.isICEfacesView method the view map is accessed with ViewRoot.getViewMap() which will create a new view map if one is missing for the current request. This behavior together with our dispose-window request issued on page close would generate a view that was never used.

        The applied fix was to modify EnvUtils.isICEfacesView method to avoid creating a new view (and an associated view map) during a post-back.

        Show
        Mircea Toma added a comment - - edited Okay, there are two issues here. The first issue is still triggered by JSF/Mojarra, when a ViewExpiredException is thrown (for a request that targets a discarded view). Mojarra is rendering a debug page to show what when wrong but doing so it will evaluate the EL expressions found in the page which in turn will trigger the creation of the beans referenced by the EL expressions. The debug page is not used when the application runs in Production mode so the beans are not instantiated anymore on ViewExpiredException . The second issue is in ICEfaces code. In EnvUtils.isICEfacesView method the view map is accessed with ViewRoot.getViewMap() which will create a new view map if one is missing for the current request. This behavior together with our dispose-window request issued on page close would generate a view that was never used. The applied fix was to modify EnvUtils.isICEfacesView method to avoid creating a new view (and an associated view map) during a post-back.
        Hide
        Mircea Toma added a comment - - edited

        Applied fix to Hamburg Sud P02 branch, our 3.3.x maintenance branch and trunk.

        Show
        Mircea Toma added a comment - - edited Applied fix to Hamburg Sud P02 branch, our 3.3.x maintenance branch and trunk.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Judy Guglielmin
          • Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: