我需要从GlassFish服务器中的servlet启动后台任务,并且我认为WorkManager是某种程度上与Java EE兼容的方式来实现这一目标。

以前在Glassfish v2中,它的工作原理相当不错:我使用了静态方法WorkManagerFactory.createWorkManager(String poolName),它给了我一个WorkManager,我可以用它来通过startWork(Work)启动Work。

在GlassFish v3.0.1中,API进行了更改:WorkManagerFatory中没有更多的静态createWorkManager()方法,并且createWorkManager带有两个额外的参数:资源适配器名称和ClassLoader。我很困惑:我现在应该如何获得WorkManager?

我试图亲自实例化WorkManagerFactory并调用createWorkManager(),但出现以下异常:


  实例化工作管理器的资源适配器[jmsra]时发生错误
  java.lang.NullPointerException
  在com.sun.enterprise.connectors.work.WorkManagerFactory.getConnectorRuntime(WorkManagerFactory.java:202)
  在com.sun.enterprise.connectors.work.WorkManagerFactory.createWorkManager(WorkManagerFactory.java:122)


至少可以说,有关此主题的可用文档非常少...因此,我们将不胜感激。

最佳答案

对于它的价值,我最终使用了Spring的TaskExecutor API,该API的优势是让我选择要使用的实现。奇迹般有效。

该界面与WorkManager足够接近,因此我几乎不需要对代码进行任何更改。

07-24 19:01