【问题标题】:Vaadin Push - ContextNotActiveExceptionVaadin 推送 - ContextNotActiveException
【发布时间】:2016-02-09 18:51:04
【问题描述】:

我在 Wildfly 9.0.2 上使用 Vaadin 7.5.8。在我们的应用程序中,我们需要 Push 支持,所以我添加了 maven 依赖项

<groupId>com.vaadin</groupId>
<artifactId>vaadin-push</artifactId>

并在 servlet 初始化中添加 PushMode 参数。

@WebServlet(value = {"/ui/*", "/VAADIN/*"}, asyncSupported = true, initParams = {
@WebInitParam(name = "UIProvider", value = "com.vaadin.cdi.CDIUIProvider"),
@WebInitParam(name = "pushmode", value = "automatic")})

在应用程序启动时,我将看到我们应用程序的登录页面。从此时起,导致服务器通信的每个操作都以此错误结束:

Caused by: javax.enterprise.context.ContextNotActiveException: WebBeans context with scope type annotation @SessionScoped does not exist within current thread
    at org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:330) ~[openwebbeans-impl-1.2.7.jar:1.2.7]
    at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:88) ~[openwebbeans-impl-1.2.7.jar:1.2.7]
    at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:70) ~[openwebbeans-impl-1.2.7.jar:1.2.7]
    at com.vaadin.cdi.internal.BeanStoreContainer$$OwbNormalScopeProxy0.getUIBeanStore(com/vaadin/cdi/internal/BeanStoreContainer.java) ~[na:1.0.3]
    at com.vaadin.cdi.internal.UIScopedContext.get(UIScopedContext.java:97) ~[vaadin-cdi-1.0.0.alpha2.jar:1.0.3]
    at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:754) ~[openwebbeans-impl-1.2.7.jar:1.2.7]
    at org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:139) ~[openwebbeans-impl-1.2.7.jar:1.2.7]

当我从 servlet 配置中删除 push 参数时,一切正常。我的推送配置有问题吗?

【问题讨论】:

  • 为什么要在 EE 7 应用服务器上打包 OpenWebBeans 1.2.7?这肯定会产生依赖性问题。
  • 谢谢。你说的对。我必须删除依赖项。

标签: vaadin cdi java-ee-6 vaadin-push


【解决方案1】:

您的问题可能是由 VaadinUI 在会话上下文未激活时尝试异步推送到客户端引起的。尝试切换到支持异步的 false 以使用轮询而不是真正的异步推送。

不幸的是,这是 Vaadin CDI 插件的一个限制,异步推送在设计时并未考虑范围实现。

-Juuso

【讨论】:

  • 感谢您的回答。我删除了我的测试代码并从这个示例重新开始:vaadin.com/book/-/page/advanced.cdi.html - "Communicating Between UIs" 。没有失败,但推送没有按预期工作。我推送的消息只会在我刷新浏览器时显示(单击导航点):(.
  • 无论 cdi 上下文如何,您都应该能够使用轮询来刷新 ui,您在某处是否有确切代码库的副本?
  • 它有效:)。我看过 vaadin push 演示。当我添加以下代码时,它可以工作:UI.getCurrent().getPushConfiguration().setPushMode(PushMode.AUTOMATIC);。我认为这是默认设置,因为我在 servlet 上声明了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多