- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Vaadin 框架和 Java EE 的新手。我正在使用 Vaadin Framework 8.1.6,Vaadin-CDI 插件 2.0.0,在 TomEE 7.0.2 服务器上运行。我正在尝试使用 EJB 托管线程池 (ManagedExecutorService) 进行异步/后台数据加载。我在使用一些注入(inject)的 bean 时遇到问题。
所有注入(inject)的 bean 在单线程 UI 中都运行良好。当我想在后台线程中使用一些注入(inject)的bean时,其中一些无法访问。
Vaadin-CDI 用户界面
@CDIUI("")
@Theme("myuitheme")
@Push
public class MyUI extends UI {
// ...
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinCDIServlet {
}
}
数据服务
@NormalUIScoped
public class DataService {
// consts, functions, ...
public Data getData(String param) {
// call REST service, load, decode and aggregate data
// ...
}
}
我的 View
@CDIView(value=MyView.VIEWNAME, supportsParameters=true)
public class MyView extends Panel implements View {
public final static String VIEWNAME = "main";
@Resource
private ManagedExecutorService executor;
@Inject
private MyUI ui;
@Inject
private DataService dataService;
public void fun1() {
System.out.println("fun1, thread_id: " + Thread.currentThread().getId());
Future<Data> dataFuture = executor.submit(() -> loadData(param));
// ...
}
private Data loadData(String param) {
// launched in executor thread
System.out.println("loadData, thread_id: " + Thread.currentThread().getId());
// accessing injected ui works fine, the ui is updated correctly
ui.access(() -> {
clearMyView();
}
// accessing injected dataService doesn't work
// exception: java.lang.IllegalStateException
Data data = dataService.getData(param);
ui.access(() -> {
updateMyView(data);
}
return data;
}
//...
}
日志
fun1, thread_id: 77
loadData, thread_id: 102
异常
java.lang.IllegalStateException: Session data not recoverable for DataService, WebBeansType:MANAGED, Name:null, API Types:[xxx.DataService,java.lang.Object], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] at com.vaadin.cdi.internal.UIScopedContext.getContextualStorage(UIScopedContext.java:68) at org.apache.deltaspike.core.util.context.AbstractContext.get(AbstractContext.java:113) at com.vaadin.cdi.internal.AbstractVaadinContext.get(AbstractVaadinContext.java:154) at com.vaadin.cdi.internal.ContextWrapper.get(ContextWrapper.java:49) at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:101) at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:71) at xxx.myui.data.DataService$$OwbNormalScopeProxy0.getData(xxx/myui/data/DataService.java) at xxx.myui.view.MyView.loadData(MyView.java:855) at xxx.myui.view.MyView.lambda$27(MyView.java:645) at org.apache.openejb.threads.task.CUCallable$1.call(CUCallable.java:34) at org.apache.openejb.threads.task.CUTask.invoke(CUTask.java:100) at org.apache.openejb.threads.task.CUCallable.call(CUCallable.java:31) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
怎么了?
最佳答案
您对注释 @NormalUIScoped
有什么具体原因吗?如果不是,则此更改有效
// @NormalUIScoped // why is this ?
@UIScoped @Stateful
public class DataService {
...
}
关于asynchronous - EJB 异步线程与 Vaadin,注入(inject)不工作(Vaadin 8、Vaadin-CDI、EJB ManagedExecutorService 线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47453522/
我对 Arquillian 和 ManagedExecutorService 存在问题。 Arquillian 无法找到默认的 ManagedExecutorService。异常(exception)
我正在使用ManagedExecutorService处理作业列表。我在主线程中处理作业并使用 ManagedExecutor 执行每个作业。将来作业大小有可能超过池大小...所以我想知道,发生这种情
类 javax.enterprise.concurrent.ManagedExecutorService 管理 Enterprise Java Bean 中的线程。 As threads in EJB
我想添加新的ManagedExecutorService资源到 WildFly 10。 我编辑standalone.xml,并将行添加到 : 重新启动wildfy后,我在 JNDI View 中找
我有一些使用 Java EE 的服务 ManagedExecutorService (在 Wildfly 9 中) public class FooService{ @Resource
在描述我的问题之前,我想概述一下我希望通过我的应用程序实现的目标。 我基本上想下载可能有大量文件,并定义最大并行下载数。 我想在应用程序服务器上运行此应用程序并为此选择 Glassfish 4(我想尝
在ManagedExecutorService的javadoc中,有 Since: 1.0 这个接口(interface)不是来自 jsr 2362013 年发布的? 这不是 JavaEE 7 的新功
在 Java SE 中,我们可以使用像 这样的结构 ExecutorService es1 = Executors.newSingleThreadExecutor(); ExecutorService
我正在尝试学习如何在 wildfy 11 上使用托管执行程序服务,但是当我部署应用程序时,出现以下错误: 10:28:34,185 错误 [org.jboss.as.controller.manage
我们当前的旧版 Web 应用程序在其中创建不受应用程序服务器容器管理的线程。我必须用JavaEE多线程标准来修改它。 我的网络应用程序在 Tomcat 上运行良好,但在 Websphere 上失败。
我最近使用 GlassFish/Payara 构建了一个 Java EE 7 Web 应用程序。 Web 应用程序在底层操作系统上按需启动长时间运行的任务(> 2 小时)。这些任务基本上是用 Pyth
我在 REST 服务中调用了以下方法,需要立即返回: @Inject private ScheduleManager scheduleManager; @Resource(name = "Defaul
我是 Vaadin 框架和 Java EE 的新手。我正在使用 Vaadin Framework 8.1.6,Vaadin-CDI 插件 2.0.0,在 TomEE 7.0.2 服务器上运行。我正在尝
我是一名优秀的程序员,十分优秀!