通过JNDI从WAS中获取commonj Workmanager并不是一件大事,但我的代码在OSGi环境中失败(我使用的是bundleActivator,而不是aries蓝图)。
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 的一个实例。
在IBM 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 /
答案 0 :(得分:1)
根据类源位置,您似乎已在包中打包了commonj.work类。您应该删除它们以允许从WebSphere Application Server运行时加载它们。