Java 如何使并发实用程序(JSR236)在普通的非EE Tomcat8中工作?

Java 如何使并发实用程序(JSR236)在普通的非EE Tomcat8中工作?,java,tomcat,executorservice,java-ee-7,apache-tomee,Java,Tomcat,Executorservice,Java Ee 7,Apache Tomee,我的技术堆栈包括 (普通,非EE) (作为CDI 1.2的参考实现) 为了能够以更明智和更安全的方式使用和管理线程,我希望包含此依赖项 (作为实施的参考) 我尝试以不同的方式将bean注入到不同范围的bean中(基于视图、基于会话、基于应用程序) 似乎什么都不起作用,例外情况也发生了 这可能是由于不正确的bean注册造成的。因为我找不到。我扫描了整个类路径,在某处找不到任何定义ManagedExecutorService或其任何实现的内容 我试图自己在context.xml中注册它,

我的技术堆栈包括

  • (普通,非EE)
  • (作为CDI 1.2的参考实现)
为了能够以更明智和更安全的方式使用和管理线程,我希望包含此依赖项

  • (作为实施的参考)
我尝试以不同的方式将bean注入到不同范围的bean中(基于视图、基于会话、基于应用程序)

似乎什么都不起作用,例外情况也发生了

这可能是由于不正确的bean注册造成的。因为我找不到。我扫描了整个类路径,在某处找不到任何定义
ManagedExecutorService
或其任何实现的内容

我试图自己在
context.xml
中注册它,但没有成功。我(天真地)假设我的非EE Tomcat的配置是相同的

<Resource name="ManagedExecutorService"
          type="javax.enterprise.concurrent.ManagedExecutorService" />


显然不是

我的问题是

  • 是否可以在非EE服务器(特别是Tomcat 8.5)上设置并发实用程序

  • 如果是的话,我在这里遗漏了什么

  • 我无法切换到任何JavaEE应用服务器。
    我无法升级列出的依赖项

    相关:


    所以“@Inject”在Tomcat中肯定不起作用。这是一个JavaEE注释,Tomcat只是忽略了它。Tomcat只实现JavaEE的JSP和Servlet部分。您需要使用ApacheTomee,它确实工作得很好:)您需要将Glassfish实现添加到
    tomcat/lib
    目录,然后在
    server.xml
    中初始化它的一个实例。然后,在servlet或过滤器中,您可以使用
    @Resource
    注释来注入它(如果名称是唯一的,则不需要限定名称)。如果您使用的是Weld和Tomcat,那么您确实应该切换到TomEE。您目前正在尝试手工组装一台JavaEE服务器,而TomEE是一个为您做了所有基础工作的社区。@JonathanS.Fisher谢谢,我非常感谢您在您的答案下回复我的评论。实际上,我让CDI在普通Tomcat中工作,并且我成功地将所有
    @ManagedBean
    移动到了CDIBean(例如
    @Named
    +
    @SessionScoped
    )@stdunbar我想做尽可能少的更改(配置方面和依赖方面),并让一些EE特性在普通Tomcat中工作(CDI[完成]CDI上下文中的并发管理[这就是问题所在])。这不是架构问题。
      @Resource
      private javax.enterprise.concurrent.ManagedExecutorService service;
    
      @Resource(lookup="java:comp/DefaultManagedExecutorService")
      private javax.enterprise.concurrent.ManagedExecutorService service;
    
    java.lang.RuntimeException:
        Error looking up java:comp/env/.../ManagedExecutorService in JNDI
    javax.naming.NameNotFoundException:
        Name [.../ManagedExecutorService] is not bound in this Context.
    
    <Resource name="ManagedExecutorService"
              type="javax.enterprise.concurrent.ManagedExecutorService" />
    
    <Resource id="ManagedExecutorService"
              type="javax.enterprise.concurrent.ManagedExecutorService" />