从Container获取线程?

在大多数应用程序服务器上,J2EE Ejb规范禁止“手动”创建线程,因为这些资源应由服务器管理。

但有没有办法从Tomcat,Glassfish,Jboss等获得线程; 从而访问他们的ThreadPool?

您可以使用commonj WorkManager 。 这是IBM和BEA提出的一项提议,用于提供完成此任务的标准方法(访问容器管理的线程)。

虽然它没有包含在实际规范中,但是大多数容器都有可用的实现。

  • 在Weblogic中使用
  • 在WebSphere中使用
  • Tomcat,JBOSS和其他人的实现
  • Spring集成

从容器获取线程的合法方法是使用JCA(Java Connector Architecture)。 使用此技术实现的组件称为“资源适配器”,并打包为rar文件。

实现非常冗长,但在简单的情况下并不太复杂。 祝你好运。

我已经看过至少一个实用程序类来获取Tomcat的线程池,但是走这条路是不明智的。 创建这些线程是为了为EJB或Servlet的请求提供服务,而不是为了支持EJB或Servlet。 您占用的每一个都只是另一个线程,无法用于服务对容器的请求。

您可能只需要引入静态ThreadPool并使用静态初始化程序来解决此规范中的EJB规范,但您显然必须确保线程代码运行良好,否则它可能会真正使您的EJB陷入困境。