Hi, The other day I've helped Sebastien with the task he explained at http://markmail.org/message/mmviy6tsv47g7rhr.
The problem we hit is that when an non-http thread needs to write to Native WebSockets connection it fails at Weld check for active context at ConversationPropagator#onRequestHandlerScheduled(). When Native WS creates the dummy RequestCycle at org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.broadcastMessage(AbstractWebSocketProcessor.java:218) [wicket-native-websocket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] it also calls org.apache.wicket.request.cycle.RequestCycle.scheduleRequestHandlerAfterCurrent(RequestCycle.java:794) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] that notifies all IRequestCycleListeners about the scheduled request handler. https://github.com/apache/wicket/blob/master/wicket-cdi-1.1/src/main/java/org/apache/wicket/cdi/ConversationPropagator.java#L130 checks whether the conversation is transient and this leads to the error below. In the use case there is no usage of CDI in the non-http thread at all. It is just that ConversationPropagator as IRequestCycleListener is notified and it tries to do its checks. As a workaround I've try/catched ConversationPropagator.java#L130 and returned null in case of exception. Is there a better way to check for active context before trying to do: if (conversation.isTransient()) ? [0m [31m10:28:05,358 ERROR [org.apache.wicket.cdi.ConversationPropagator] (pool-5-thread-1) No context!: org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23] at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23] at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23] at org.jboss.weld.proxies.Conversation$1224015424$Proxy$_$$_WeldClientProxy.isTransient(Unknown Source) at org.apache.wicket.cdi.ConversationPropagator.onRequestHandlerScheduled(ConversationPropagator.java:132) [wicket-cdi-1.1-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:182) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:178) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80) [wicket-util-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection.onRequestHandlerScheduled(RequestCycleListenerCollection.java:177) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:182) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:178) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80) [wicket-util-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection.onRequestHandlerScheduled(RequestCycleListenerCollection.java:177) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:182) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection$7.notify(RequestCycleListenerCollection.java:178) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80) [wicket-util-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycleListenerCollection.onRequestHandlerScheduled(RequestCycleListenerCollection.java:177) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.request.cycle.RequestCycle.scheduleRequestHandlerAfterCurrent(RequestCycle.java:794) [wicket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.broadcastMessage(AbstractWebSocketProcessor.java:218) [wicket-native-websocket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at org.apache.wicket.protocol.ws.api.AbstractWebSocketConnection.sendMessage(AbstractWebSocketConnection.java:43) [wicket-native-websocket-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT] at quickstart.ws.WorkflowListener.onMessage(WorkflowListener.java:61) [classes:] at quickstart.ejb.WorkflowBean$1.run(WorkflowBean.java:85) [quickstart-ejb-1.0-SNAPSHOT.jar:] at quickstart.ejb.WorkflowBean.start(WorkflowBean.java:53) [quickstart-ejb-1.0-SNAPSHOT.jar:] at quickstart.ejb.WorkflowBean$Proxy$_$$_WeldClientProxy.start(Unknown Source) [quickstart-ejb-1.0-SNAPSHOT.jar:] at quickstart.HomePage$3.run(HomePage.java:80) [classes:] at quickstart.MyApplication$TasksRunnable.run(MyApplication.java:80) [classes:] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_72] at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_72] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) [rt.jar:1.7.0_72] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) [rt.jar:1.7.0_72] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_72] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_72] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_72] Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov