[
https://issues.apache.org/jira/browse/MYFACES-4445?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Milan Siebenbürger reopened MYFACES-4445:
-----------------------------------------
Hello Thomas,
thanks for the quick response. I've tested your changes a bit and:
Fix of Issue 2 is working correctly, thanks for the good work.
Issue 1 (asynchronous context push) still does not work. However, the problem
is now a bit deeper.
The problem is in the WebsocketApplicationSessionHolder class,
getWebsocketSessionLRUCache() method.
When accessing this method via a standard request, the classloader received by
ClassLoader cl = ClassUtils.getContextClassLoader() is this ->
org.apache.catalina.loader.ParallelWebappClassLoader and afterwards the
received ConcurrentLRUCache is the correct one that contains the channel tokens.
When accessing this method via async thread, the classloader is now class
jdk.internal.loader.ClassLoaders$AppClassLoader, and subsequently the received
ConcurrentLRUCache received is empty - and no message is sent.
Could you please check if there is any solution to this problem?
Thanks
Milan Siebenbürger
PS: One more bonus question. Do you know if there is a workable solution to the
HeartBeat websocket (sections 5.5.2 and 5.5.3 of rfc6455 ). For now we are
using WebsocketApplicationSessionHolder.getWebsocketSessionLRUCache() to get
the channel tokens to ping, but I'm not sure if this LRUCache always returns
all tokens at any given time. I am open to any suggestions for this solution.
Thank you very much.
> "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)