Java Websphere 8+;WorkManager ClassCastException
通过JNDI从WAS获取commonj Workmanager不是什么大事,但我的代码在OSGi环境中失败(我使用的是bundleActivator,而不是aries blueprint) 这个代码块在战争中运行良好。但是如果我将它添加到我的本地OSGi包中,它将失败,并出现ClassCastException 检查对象时,它告诉我workManager是com.ibm.ws.asynchbeans.WorkManagerImpl的一个实例 在IBMs WorkManager和CommonJ WorkManager之间创建自定义委托器应该不是什么大事,但由于我的研究,我找不到IBMs WorkManager的类层次结构,也找不到包含该类的JAR 我们使用WebSphere8.0.0.6 WorkManager.class.getClassLoader()=org.eclipse.osgi.internal.baseAdapter。DefaultClassLoader@d34707f4 wm.getClass().getClassLoader().loadClass(WorkManager.class.getName()).getClassLoader()=org.eclipse.osgi.internal.baseAdapter。DefaultClassLoader@5d968aeeJava Websphere 8+;WorkManager ClassCastException,java,websphere,osgi,jndi,Java,Websphere,Osgi,Jndi,通过JNDI从WAS获取commonj Workmanager不是什么大事,但我的代码在OSGi环境中失败(我使用的是bundleActivator,而不是aries blueprint) 这个代码块在战争中运行良好。但是如果我将它添加到我的本地OSGi包中,它将失败,并出现ClassCastException 检查对象时,它告诉我workManager是com.ibm.ws.asynchbeans.WorkManagerImpl的一个实例 在IBMs WorkManager和CommonJ W
WorkManager.class.getProtectionDomain().getCodeSource().getLocation()=文件:/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运行时加载它们。什么是“本机OSGi环境”?您正在尝试从WAB访问该类吗?您是否将commonj.work类包含在包中?WorkManager.class.getClassLoader()和WorkManager.class.getProtectionDomain().getCodeSource().getLocation()以及ic.lookup(…).getClass().loadClass(WorkManager.class.getName()).getClassLoader()有哪些值?我在问题中添加了classloader信息。对于“native”,我的意思是我们不使用Aries Blueprint,jndi查找在bundleactivator中调用。
import commonj.work.WorkManager;
InitialContext ic = new InitialContext();
WorkManager wm = (WorkManager)ic.lookup("java:comp/env/wm/myWorkManager");