通过JNDI从WAS获取commonj Workmanager没什么大不了的,但是我的代码在OSGi环境中失败了(我使用的是bundleActivator,而不是白羊座的蓝图)。
import commonj.work.WorkManager;
InitialContext ic = new InitialContext();
WorkManager wm = (WorkManager)ic.lookup("java:comp/env/wm/myWorkManager");
该代码块在WAR中可以正常工作。但是,如果我将其添加到本机OSGi捆绑包中,它将失败并显示ClassCastException。
检查我的对象,它告诉我workManager是com.ibm.ws.asynchbeans.WorkManagerImpl的实例。
在IBMs WorkManager和CommonJ WorkManager之间创建自定义委托应该没什么大不了的,但是由于我的研究,我无法找到IBMs workManager的类层次结构,也找不到包含该类的JAR。
我们使用Websphere 8.0.0.6。
WorkManager.class.getClassLoader()= org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@d34707f4
wm.getClass()。getClassLoader()。loadClass(WorkManager.class.getName())。getClassLoader()= org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@5d968aee
WorkManager.class.getProtectionDomain()。getCodeSource()。getLocation()= file:/ D:/dev/IBM/WebSphere/AppServer/profiles/AppSrv01/installedEBAs/jndi-workmanager_0.0.1.SNAPSHOT/byValue/c13b7c6c-1881- 477c-a339-e0c4f992e35b.0 / 0 /
最佳答案
根据类源位置,您似乎已将commonj.work类打包在包中。您应该删除那些,以允许从WebSphere Application Server运行时中加载它们。
关于java - Websphere 8 + WorkManager ClassCastException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23300425/