Hi,

Thanks for the investigation, John!

WebSocket communication is not intercepted by servlet filters and DI
frameworks cannot prepare their proxies for request and session scoped
beans.

This is documented in the guide.

With ver. 4.1.0 Spring introduced support for scoped beans in their impl of
web sockets. But it works on a higher level...
On Oct 24, 2014 11:17 PM, "John Sarman" <[email protected]> wrote:

> The last comment on that issue states:
> It’s the responsibility of Websocket spec to implement these scopes. We
> should ensure they take the point before closing the ticket.
>
> I personally would down vote the suggestion that wicket-native-websocket
> should assume responsibility to implement the scopes, and just explicitly
> state this feature is not supported.
> Thanks for the current status of why this does not work.
>
> John
>
> On Fri, Oct 24, 2014 at 4:05 PM, Emond Papegaaij <
> [email protected]>
> wrote:
>
> > As far as I know, combining CDI's RequestScoped and SessionScoped beans
> > with websockets is stil not supported by the spec. You can find progress
> on
> > this here: https://issues.jboss.org/browse/CDI-370
> >
> > Best regards,
> > Emond
> >
> > On Fri, Oct 24, 2014 at 9:54 PM, John Sarman <[email protected]>
> wrote:
> >
> > > Ok I was able to trigger a ContextNotActiveException.  This exception
> > > occurs in both M3 and snapshot.  What I did to create the issue was to
> > > create a SessionScoped service. This is the CDI part.  I then Injected
> > that
> > > in to the HomePage.class.  The service was simple, has two methods
> > > increment and getCount.  When I call increment inside an overridden
> event
> > > method of the WebSocketBehavior such as onMessage, I
> > > get: org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
> > > active contexts for scope type javax.enterprise.context.SessionScoped.
> > >
> > > This proves the divorce claim, that is an Injected Scope based service
> > will
> > > not have an active context of said scope during a WebSocketEvent.
> > > Just to confirm this I changed the Service scope to ApplicationScoped
> and
> > > it works fine.  ApplicationScoped does not require a scope (request,
> > > session, or conversation).
> > >
> > > At the surface what I found is that either the wicket-native-websocket
> > > needs to depend on wicket-cdi-1.1 and setup the contexts during the
> > > events(not recommended), or wicket-cdi-1.1 needs to somehow intercept
> the
> > > websocket events and activate the contexts (not even sure if this is
> > > plausible), or (my recommendation) is that emond papegaaij and Igor
> > > Vaynberg
> > > look into this issue and come up with a proper solution.
> > >
> > > When cdi-1.1 was initially introduced into the codebase, the activation
> > of
> > > scope was initially solved by requiring a dependency on weld.
> Ultimately
> > > Emond simplified this in the current commit of cdi-1.1 and added code
> > > earlier in the cdi core to allow whatever cdi implementation framework
> to
> > > trigger the activation mechanism.
> > >
> > > Somehow this same triggering of context activation needs to occur in
> the
> > > websockets code so that if a javax.inject annotation service is called
> > > during a websocket event that the proper context has been activated.
> > >
> > > Input is definitely needed from the Wicket team to prevent the two
> > packages
> > > from divorcing :)
> > >
> > >
> > > --
> > > John
> > >
> > >
> > >
> > >
> > >
> > > On Fri, Oct 24, 2014 at 3:02 PM, Sebastien <[email protected]> wrote:
> > >
> > > > Hi John, I will give you an example on monday...
> > > > On Oct 24, 2014 8:46 PM, "John Sarman" <[email protected]> wrote:
> > > >
> > > > > This works fine by overriding onMessage in your test class and
> adding
> > > > this
> > > > > crude html to your html.
> > > > >
> > > > > java:
> > > > > protected void onMessage(WebSocketRequestHandler handler,
> TextMessage
> > > > > message)
> > > > > {
> > > > >                         LOG.info(message.getText());
> > > > >
> > > > > }
> > > > >
> > > > > html:
> > > > >
> > > > > <button onclick="Wicket.WebSocket.send('message');">PRESS
> ME</button>
> > > > >
> > > > >
> > > > > Long story longer, I was able to use chrome console to hack a bad
> > test,
> > > > > Martin or other contributors, is there an up to date example for
> the
> > > > native
> > > > > websockets, or a simple point me into the right direction to better
> > > > > understand how to implement a better real world use case, both to
> > test
> > > > the
> > > > > WICKET-5733 and just to learn about the wicket way to implement
> > native
> > > > > websocket code.
> > > > >
> > > > > Thanks,
> > > > > John
> > > > >
> > > > >
> > > > > On Fri, Oct 24, 2014 at 2:17 PM, John Sarman <[email protected]
> >
> > > > wrote:
> > > > >
> > > > > > Yeah, I am just trying to trigger the onMessage at this point
> > mainly
> > > > just
> > > > > > to learn more about the native websocket package at the moment.
> > So I
> > > > am
> > > > > > just adding a button in html and adding some inline js to the
> > > onclick.
> > > > > > First attempt I copy pasted var ws = new Wicket.WebSocket();
> > > > > > ws.send('message'); from the wiki into the onclick and got a
> > > exception
> > > > in
> > > > > > the chrome console stating cannot send message while in the
> > > connecting
> > > > > > state.  Assuming I need to learn more here, but I will keep
> probing
> > > at
> > > > > this
> > > > > > mainly as an effort to learn how to use the wicket native
> > websockets.
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Fri, Oct 24, 2014 at 2:11 PM, Sebastien <[email protected]>
> > wrote:
> > > > > >
> > > > > >> Hi John,
> > > > > >>
> > > > > >> If you get the "client connected" message and no stacktrace, we
> > are
> > > > > good I
> > > > > >> guess :)
> > > > > >>
> > > > > >> I will investigate on my side given your previous answer...
> > > > > >>
> > > > > >> Thanks again,
> > > > > >> Sebastien
> > > > > >> On Oct 24, 2014 7:58 PM, "John Sarman" <[email protected]>
> > > wrote:
> > > > > >>
> > > > > >> > Sebastian,
> > > > > >> > Just updated my snapshots, clean built wicket, changed the
> > > > dependency
> > > > > to
> > > > > >> > 7.0.0-SNAPSHOT and all seems well running on Wildfly.  Is
> there
> > > > > >> something
> > > > > >> > else I need to do to trigger your error.  Currently page comes
> > up
> > > > with
> > > > > >> the
> > > > > >> > label  7.0.0-SNAPSHOT. I even checked my .m2 repo to verify my
> > jar
> > > > > files
> > > > > >> > had proper timestamp, which they did.  I went so far as to
> clone
> > > > > wicket,
> > > > > >> > build, and test app.  Is there a way to trigger the websocket
> > > push,
> > > > > >> because
> > > > > >> > currently log file only states:
> > > > > >> >
> > > > > >> > 13:40:19,258 ERROR [stderr] (default task-1)
> > > > > >> >
> > > ********************************************************************
> > > > > >> > 13:40:19,259 ERROR [stderr] (default task-1) *** WARNING:
> Wicket
> > > is
> > > > > >> running
> > > > > >> > in DEVELOPMENT mode.              ***
> > > > > >> > 13:40:19,259 ERROR [stderr] (default task-1) ***
> > > > > >> >     ^^^^^^^^^^^                    ***
> > > > > >> > 13:40:19,259 ERROR [stderr] (default task-1) *** Do NOT deploy
> > to
> > > > your
> > > > > >> live
> > > > > >> > server(s) without changing this.  ***
> > > > > >> > 13:40:19,259 ERROR [stderr] (default task-1) *** See
> > > > > >> > Application#getConfigurationType() for more information. ***
> > > > > >> > 13:40:19,259 ERROR [stderr] (default task-1)
> > > > > >> >
> > > ********************************************************************
> > > > > >> > 13:40:21,592 INFO  [com.mycompany.HomePage] (default task-7)
> > > Client
> > > > > >> > connected
> > > > > >> >
> > > > > >> > where the relevant part is the last log statement stating
> > > websocket
> > > > is
> > > > > >> > connected to client.
> > > > > >> >
> > > > > >> > I would like to see if the log message from onPush works fine,
> > but
> > > > > >> unsure
> > > > > >> > how to test this ATM.
> > > > > >> >
> > > > > >> > Hope this helps,
> > > > > >> > John
> > > > > >> >
> > > > > >> >
> > > > > >> >
> > > > > >> > On Fri, Oct 24, 2014 at 12:03 PM, Sebastien <[email protected]
> >
> > > > wrote:
> > > > > >> >
> > > > > >> > > Hi,
> > > > > >> > >
> > > > > >> > > On Fri, Oct 24, 2014 at 6:00 PM, Martin Grigorov <
> > > > > >> [email protected]>
> > > > > >> > > wrote:
> > > > > >> > >
> > > > > >> > > > John,
> > > > > >> > > >
> > > > > >> > > > The quickstart uses 7.0.0-M3.
> > > > > >> > > >
> > > > > >> > >
> > > > > >> > > Oops, right! I'm really sorry for that! I probably wanted to
> > > test
> > > > a
> > > > > >> last
> > > > > >> > > time it was not repro in -M3...
> > > > > >> > >
> > > > > >> > >
> > > > > >> > >
> > > > > >> > > > Sebastien said that the problem is in 7.0.0-SNAPSHOT.
> > > > > >> > > >
> > > > > >> > > > Martin Grigorov
> > > > > >> > > > Wicket Training and Consulting
> > > > > >> > > > https://twitter.com/mtgrigorov
> > > > > >> > > >
> > > > > >> > > > On Fri, Oct 24, 2014 at 6:51 PM, John Sarman <
> > > > > [email protected]>
> > > > > >> > > wrote:
> > > > > >> > > >
> > > > > >> > > > > Sebastian,
> > > > > >> > > > > I also deployed your quickstart in wildfly-8.0Final with
> > no
> > > > > >> changes,
> > > > > >> > > and
> > > > > >> > > > > all seems well.  As for the quickstart test, you would
> > need
> > > to
> > > > > use
> > > > > >> > > > cdi-unit
> > > > > >> > > > > as a test dependency to enable the cdi aspects for the
> > > > > >> wicket-tester.
> > > > > >> > > To
> > > > > >> > > > > successfully add that please look at the test section in
> > the
> > > > > >> > > > wicket-cdi-1.1
> > > > > >> > > > > code.  In there you will find an extended version of
> > > > > WicketTester
> > > > > >> > that
> > > > > >> > > > > properly starts and stops the different contexts.
> Without
> > > > > using a
> > > > > >> > > > package
> > > > > >> > > > > like cdi-unit or arquillian, I am afraid you will always
> > > get a
> > > > > >> > Context
> > > > > >> > > > > based exception because there is no cdi service provider
> > > > > >> activated.
> > > > > >> > > > >
> > > > > >> > > > > On Fri, Oct 24, 2014 at 11:15 AM, John Sarman <
> > > > > >> [email protected]>
> > > > > >> > > > > wrote:
> > > > > >> > > > >
> > > > > >> > > > > > I was able to start your test app in Glassfish4
> without
> > > > > changes.
> > > > > >> > > > > >
> > > > > >> > > > > > For Tomcat I added
> > > > > >> > > > > >                  <dependency>
> > > > > >> > > > > > <groupId>org.jboss.weld</groupId>
> > > > > >> > > > > > <artifactId>weld-core</artifactId>
> > > > > >> > > > > > <version>2.1.2.Final</version>
> > > > > >> > > > > > </dependency>
> > > > > >> > > > > > <dependency>
> > > > > >> > > > > > <groupId>org.jboss.weld.servlet</groupId>
> > > > > >> > > > > > <artifactId>weld-servlet-core</artifactId>
> > > > > >> > > > > > <version>2.1.2.Final</version>
> > > > > >> > > > > > </dependency>
> > > > > >> > > > > > to the pom.
> > > > > >> > > > > >
> > > > > >> > > > > > I then added
> > > > > >> > > > > > <listener>
> > > > > >> > > > > > <!-- initialize Weld in servlet environment -->
> > > > > >> > > > > >
> > > > > >> > > > > >
> > > > > >> > > > >
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > > >
> > > >
> > >
> >
> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
> > > > > >> > > > > > </listener>
> > > > > >> > > > > >
> > > > > >> > > > > > to web.xml
> > > > > >> > > > > >
> > > > > >> > > > > > The homepage then loaded fine as well.  If you look in
> > > > > >> > > wicket-examples
> > > > > >> > > > > you
> > > > > >> > > > > > can find these CDI related additions to the pom.xml
> and
> > > the
> > > > > >> > web.xml.
> > > > > >> > > > > >
> > > > > >> > > > > > Hope this helps
> > > > > >> > > > > >
> > > > > >> > > > > > John Sarman
> > > > > >> > > > > >
> > > > > >> > > > > >
> > > > > >> > > > > >
> > > > > >> > > > > >
> > > > > >> > > > > > On Fri, Oct 24, 2014 at 4:12 AM, Sebastien <
> > > > [email protected]>
> > > > > >> > wrote:
> > > > > >> > > > > >
> > > > > >> > > > > >> Hi Martin,
> > > > > >> > > > > >>
> > > > > >> > > > > >> On Thu, Oct 23, 2014 at 8:27 PM, Martin Grigorov <
> > > > > >> > > > [email protected]>
> > > > > >> > > > > >> wrote:
> > > > > >> > > > > >>
> > > > > >> > > > > >> > Ticket please.
> > > > > >> > > > > >> > With quickstart will be processed sooner ;-)
> > > > > >> > > > > >> >
> > > > > >> > > > > >>
> > > > > >> > > > > >> Fair :)
> > > > > >> > > > > >> https://issues.apache.org/jira/browse/WICKET-5733
> > > > > >> > > > > >>
> > > > > >> > > > > >> Best regards,
> > > > > >> > > > > >> Sebastien.
> > > > > >> > > > > >>
> > > > > >> > > > > >
> > > > > >> > > > > >
> > > > > >> > > > >
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to