[
https://issues.apache.org/jira/browse/MYFACES-4445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17599378#comment-17599378
]
Milan Siebenbürger commented on MYFACES-4445:
---------------------------------------------
Just an idea (don't have time to look at mojarra yet, hopefully I'll have time
this weekend):
Use this implementation to add a function to the AbstractScope class to
unregister the channelToken:
{code:java}
public void unregisterToken(String channel, String token)
{
if (token == null || token.isEmpty()) {
return;
}
List<WebsocketChannel> list = channelTokens.get(channel);
if (list != null) {
list.removeIf(p -> token.equals(p.getChannelToken()));
}
} {code}
And call this function in the onClose method in the EndPointImpl.java, after
removing the session from the WebsocketSessionManager.
{code:java}
WebsocketScopeManager scopeManager = CDIUtils.get(beanManager.get(),
WebsocketScopeManager.class);
scopeManager.getApplicationScope(false).unregisterToken(channel, channelToken);
{code}
Don't know now, if this needs to be done in sessionScopeManager /
viewScopeManager (and if they're accessible in this piece of code)..
> "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)