我需要从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足够接近,因此我几乎不需要对代码进行任何更改。