ICEfaces
  1. ICEfaces
  2. ICE-5184

transient push failure in portal environment

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.8.2
    • Fix Version/s: 1.8.3, 1.8.2-EE-GA_P02
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      ICEfaces, Liferay

      Description


      Occasionally push events will fail to be delivered. SessionRenderer.render() is known to be called but the session appears to be no longer in the group.

      This is believed to be due to the WeakReference referring to the sesionID in GroupAsyncRenderer:

                  if (!contains(object)) {
                      if (group.add(new WeakReference(object))) {


      it is not necessary to retain the sessionID String with only a WeakReference, unlike the previous implementation where a reference to the session object was maintained.

        Issue Links

          Activity

          Hide
          Ted Goddard added a comment -

          Assigning to Deryk for dispatch. Micha will potentially provide a test case.

          Show
          Ted Goddard added a comment - Assigning to Deryk for dispatch. Micha will potentially provide a test case.
          Hide
          Ted Goddard added a comment -

          This bug does not seem to appear in applications that are using the Renderable API (thereby avoiding the weak reference to the sessionID).

          Show
          Ted Goddard added a comment - This bug does not seem to appear in applications that are using the Renderable API (thereby avoiding the weak reference to the sessionID).
          Hide
          Micha Kiener added a comment -

          This is my assumption:

          • Whenever the session is decorated (a lot of frameworks do that), what is added as a WeakReference within the GroupAsyncRenderer's add(Object) method is not the "real" session object but rather the wrapped one which is thrown away and hence becomes weakly reachable and might be removed by the house-keeping mechanism within the GroupAsyncRenderer.

          This might be an explanation why push is not working from time to time and a well know workaround is to add the session to a render group more frequently.

          Show
          Micha Kiener added a comment - This is my assumption: Whenever the session is decorated (a lot of frameworks do that), what is added as a WeakReference within the GroupAsyncRenderer's add(Object) method is not the "real" session object but rather the wrapped one which is thrown away and hence becomes weakly reachable and might be removed by the house-keeping mechanism within the GroupAsyncRenderer. This might be an explanation why push is not working from time to time and a well know workaround is to add the session to a render group more frequently.
          Hide
          Deryk Sinotte added a comment -

          As Ted notes, now that we've moved away from relying on sessions and now use session ids, we likely don't require wrapping the key in a WeakReference any longer as it would potentially cause the noted problem if the key itself does not live as long as the session.

          Show
          Deryk Sinotte added a comment - As Ted notes, now that we've moved away from relying on sessions and now use session ids, we likely don't require wrapping the key in a WeakReference any longer as it would potentially cause the noted problem if the key itself does not live as long as the session.
          Hide
          Ted Goddard added a comment -

          Micha, please let us know whether the code change of removing the WeakReference resolves the problem in your application.

          Show
          Ted Goddard added a comment - Micha, please let us know whether the code change of removing the WeakReference resolves the problem in your application.
          Hide
          Ken Fyten added a comment -

          ...or attach a test-case that can be used to reproduce the issue and verify the fix.

          Show
          Ken Fyten added a comment - ...or attach a test-case that can be used to reproduce the issue and verify the fix.
          Hide
          Ken Fyten added a comment -

          Cannot pursue this issue without a test case.

          Show
          Ken Fyten added a comment - Cannot pursue this issue without a test case.
          Hide
          Deryk Sinotte added a comment -

          Re-opening to apply fix.

          Show
          Deryk Sinotte added a comment - Re-opening to apply fix.
          Hide
          Deryk Sinotte added a comment -

          Applying modified version of the fix that was sent to support customer.

          Show
          Deryk Sinotte added a comment - Applying modified version of the fix that was sent to support customer.

            People

            • Assignee:
              Unassigned
              Reporter:
              Ted Goddard
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: