[
https://issues.apache.org/jira/browse/MYFACES-4660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18037808#comment-18037808
]
Volodymyr Siedlecki commented on MYFACES-4660:
----------------------------------------------
Hi, thanks for the quick reply.
I see the same behavior in 4.0 (null), so it looks like returning null is the
right approach for 4.1
I'll merge in a fix and get a new 4.1.2 release started.
> WebSockets - view destroying + multiple tabs/windows
> ----------------------------------------------------
>
> Key: MYFACES-4660
> URL: https://issues.apache.org/jira/browse/MYFACES-4660
> Project: MyFaces Core
> Issue Type: Bug
> Components: General
> Affects Versions: 4.0.0, 4.0.1, 4.0.2, 5.0.0
> Reporter: Milan Siebenbürger
> Priority: Minor
> Fix For: 5.0.0, 4.1.2, 4.0.4
>
> Attachments: test-faces23-websocket.war
>
>
> Hello,
> We have identified two (hopefully minor) bugs while using WebSockets.
> 1. destroying SessionScope channelToken when destroying ViewScope bean
> If the user reaches the NUMBER_OF_VIEWS_IN_SESSION limit, the ViewScope bean
> (which holds channelTokens) is automatically destroyed (@PreDestroy).
> Additionally, any channelToken from the parent sessionScope is destroyed,
> even if it is still in use. Unfortunately, this destruction occurs after a
> new view is created, so the component is rendered, the WebSocket session is
> connected, but the channelToken in the WebsocketScopeManager is destroyed.
> The solution to this issue could be simple. The destruction of the
> sessionScope channelToken could be left to the automatic destruction of the
> SessionScope. We have been testing this solution for several weeks, and it
> seems to be working fine.
>
> 2. using application in multiple tabs / browser windows (with same http
> session)
> When a user is using the application in more than one tab/window within the
> same HTTP session, the user session channels are duplicated (with the same
> channelToken) and connected to the same user identification, resulting in two
> or more WebSocket sessions. Push messages are then sent to all
> tokens/sessions. So far, everything is working as expected.
> However, when one of the views is destroyed (i.e., a tab/window is closed),
> the connected WebSocket session is also destroyed (which is expected).
> Unfortunately, this also will cause user connection to be removed . Since we
> don't track how many times the user is using this particular channelToken,
> the WebSocket connections in the other tabs/windows are also disrupted.
> A potential solution to this issue could involve tracking the number of times
> the user starts using the channelToken. We could then remove the user
> connection after all instances of its usage are destroyed, or, alternatively,
> when the SessionScope object is destroyed.
> Unfortunately, implementing this solution would cause a breaking change. It
> would involve replacing the Set holding channelTokens with a HashMap that
> also keeps track of the number of usages (refer to
> WebsocketSessionManager.java:62). Since the method getUserMap is public and
> may be used by others (such as ourselves, for implementing WebSocket
> heartbeat), they would need to update their code accordingly with the new
> version of MyFaces. An alternative approach could be implemented using
> another collection to hold the usage count of channelTokens. However, this
> method may not be as elegant, although it would not necessitate users to
> modify their applications.
> So, the questions:
> * which of these to implement?
> * and to which version (5.0? or 4.X?)
>
> Of course, I will prepare the changes in the form of a pull request to check
> the changes
>
> Milan
--
This message was sent by Atlassian Jira
(v8.20.10#820010)