Uploaded image for project: 'MyFaces Core'
  1. MyFaces Core
  2. MYFACES-4445

"No CDI container started" when using PushContext async

    XMLWordPrintableJSON

Details

    Description

      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.

      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)

      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. 

      org.apache.webbeans.web.context.WebContextsService.lazyStartSessionContext Could NOT lazily initialize session context because NO active request context

      The reason is this part of the code in PushContextImpl:

       

      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]);
          }
      }

      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

       

      Attachments

        Activity

          People

            tandraschko Thomas Andraschko
            milansi Milan Siebenbürger
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: