[
https://issues.apache.org/jira/browse/MYFACES-4445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17598488#comment-17598488
]
Milan Siebenbürger commented on MYFACES-4445:
---------------------------------------------
Hi Thomas,
at the application level, everything seems to work correctly - tested on the
demo application and even in the final application. Async future push is
working great, thanks!
But - I found something that is not 100% correct (from my point of view). It's
about removing unused tokens - when you create channels in a
session/application scope, you register a new token every time the page loads
(you put the channel token in one of those new three scope maps). But tokens
are never removed. This problem may have been present in the previous version
as well.
ViewScope is probably fine, the whole object is destroyed. However, the tokens
are present in the sessionScope and applicationScope maps forever. The
WebSocket session is correctly removed (EndPointImpl.java:131), so messages are
not physically sent (condition on WebsocketSessionManager.java:139). However,
you are working with an enlarging map, when trying to find the token for a
channel or browsing the channelToken list in PushContextImpl. Perhaps the
tokens should be removed when the web socket session is destroyed.
Will test it more later.
Milan
> "No CDI container started" when using PushContext async
> -------------------------------------------------------
>
> Key: MYFACES-4445
> URL: https://issues.apache.org/jira/browse/MYFACES-4445
> Project: MyFaces Core
> Issue Type: Task
> Components: General
> Affects Versions: 2.3-next-M7
> Reporter: Milan Siebenbürger
> Assignee: Thomas Andraschko
> Priority: Minor
> Fix For: 2.3.11, 3.0.3, 2.3-next-M8, 4.0.0-RC2
>
>
> Hello, we are trying to replace Omnifaces websockets (o:socket) with Myfaces
> implementation in our application and we are encountering some problems that
> prevent us from completing this task.
>
> 1. The most serious problem is that the MyFaces implementation does not work
> when using asynchronous computation (Future interface). Sending a push
> message ends with a "No CDI container started" exception, while the Omnifaces
> implementation works flawlessly.
> {code:java}
> java.lang.IllegalStateException: No CDI container started
> at
> org.apache.webbeans.container.OwbCDI.getWebBeansContext(OwbCDI.java:44)
> at org.apache.webbeans.container.OwbCDI.getBeanManager(OwbCDI.java:61)
> at
> org.apache.myfaces.push.cdi.PushContextImpl.send(PushContextImpl.java:64){code}
> Do you see any way to make this work, or do we have to stick with OmniFaces
> in this situation?
>
> 2. When using another type of push message, in response to a scheduler or jms
> message, sending the message works, but each time it is sent, this warning
> message is logged.
> {code:java}
> org.apache.webbeans.web.context.WebContextsService.lazyStartSessionContext
> Could NOT lazily initialize session context because NO active request
> context{code}
> The reason is this part of the code in PushContextImpl:
>
> {code:java}
> if (CDIUtils.isSessionScopeActive(beanManager)) {
> sessionTokenBean = (WebsocketSessionBean)CDIUtils.get(beanManager,
> WebsocketSessionBean.class, false, new Annotation[0]);
> if (CDIUtils.isViewScopeActive(beanManager)) {
> viewTokenBean = (WebsocketViewBean)CDIUtils.get(beanManager,
> WebsocketViewBean.class, false, new Annotation[0]);
> }
> }{code}
> Method isSessionScopeActive returns false (of course, because there is no
> session scope active in this case) - it fallbacks correctly to application
> scoped WebsocketApplicationBean, but this warning message is logged. Is there
> any way to get rid of this log - other than reconfiguring the logging
> framework?
> I have created a simple demonstration where you can see these problems. Just
> download it and run it on Apache Tomcat. ->
> https://github.com/milansie/websocket-demo
> I'd be grateful for any help or advice or, ideally, for a change in the
> MyFaces implementation.
>
> Thank you!
> Milan Siebenbürger
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)