Milan Siebenbürger created MYFACES-4445:
-------------------------------------------

             Summary: MyFaces web socket implementation - as a replacement for 
Omnifaces implementation
                 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


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)

Reply via email to