【问题标题】:Websphere 8 + WorkManager ClassCastExceptionWebsphere 8 + WorkManager ClassCastException
【发布时间】:2014-06-11 14:22:55
【问题描述】:

通过 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 之间创建一个自定义委托器应该没什么大不了的,但由于我的研究,我既找不到 IBM 的 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/

【问题讨论】:

  • “本机 OSGi 环境”是什么意思?您是否尝试从 WAB 访问课程?您是否在捆绑包中包含了 commonj.work 类? WorkManager.class.getClassLoader() 和 WorkManager.class.getProtectionDomain().getCodeSource().getLocation() 和 ic.lookup(...).getClass().loadClass(WorkManager.class.getName( )).getClassLoader() 有吗?
  • 我在我的问题中添加了类加载器信息。对于“本地”,我的意思是我们不使用 Aries 蓝图,jndi-lookup 在 bundleactivator 中被调用。

标签: java websphere osgi jndi


【解决方案1】:

根据类源位置,您似乎已将 commonj.work 类打包到包中。您应该删除它们以允许从 WebSphere Application Server 运行时加载它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多