我正在使用 WebSphere 8.5 和 JSF2.0,但在使用 WorkManager(来自 websphere - async bean)时遇到问题。我有一个实现 Work 接口的workManagerExample类。当我从我的应用程序中调用 workManagerExample 时,我无法再获取已在我的应用程序中加载的类的方法。情况:我的应用程序中有一个实用程序类(它工作正常),但是当我尝试从 workManagerExample 使用它(如 Utility.someMethod)时,我得到了一个 NPE。我在调用“startWork(WorkManagerExample)”之前检查了 Utility 类并且不为空,我可以像往常一样使用它。顺便说一句,workManager 工作正常,无需从我的应用程序调用任何已加载的类。我不能将 Utility 类作为 workManagerExample 构造函数的参数传递(这是来自客户/客户的限制)。我的问题是为什么我不再使用这个 Asyn Bean 中的 Utility 类函数?
web.xml
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
//some extra config not related
<resource-ref>
<description>WorkManager</description>
<res-ref-name>wm/default</res-ref-name>
<res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
ibm-web-bnd.xml
<web-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
version="1.0">
<virtual-host name="default_host" />
<resource-ref name="wm/default" binding-name="wm/default" />
</web-bnd>
这是我的参考指南http://www.bencode.net/blog/2014/07/26/was-async-beans/
一些java代码:Class1.java
WorkManager workManager = getWorkManager();
if (workManager!=null){
GetInfoWork currentOfferWork = new GetInfoWork(); //GetInfoWork implements Work
workManager.startWork(currentOfferWork);
}
在 GetInfoWork.java 中,当我尝试 'FacesContext.getCurrentInstance();' 我总是得到 NULL 但如果我从 Class1.java 尝试它会按预期工作。文件夹结构与通常的 JSF2 Web 应用程序一样,这是一个现有应用程序,现在我想通过 workManager(来自 com.ibm.ws.runtime.jar)添加此 Async Bean 功能。