2014-04-25 53 views
2

通過JNDI從WAS中獲取commonj Workmanager並不是什麼大問題,但是我的代碼在OSGi環境(我正在使用bundleActivator而不是aries blueprint)中失敗。Websphere 8 + WorkManager ClassCastException

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 Workbench和CommonJ WorkManager之間創建一個自定義委託人應該不是什麼大問題,但是由於我的研究,我無法找到包含該類的JAR的類層次結構。

我們使用Websphere 8.0.0.6。

WorkManager.class.getClassLoader()= [email protected]4

wm.getClass()。getClassLoader()。的loadClass(WorkManager.class.getName())。 getClassLoader()= [email protected]e

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

「本地OSGi環境」是什麼意思?你是否想從WAB訪問課程?你有沒有把commonj.work類包含進你的包中? WorkManager.class.getClassLoader()和WorkManager.class.getProtectionDomain()。getCodeSource()。getLocation()和ic.lookup(...)。getClass()。loadClass(WorkManager.class.getName() ))。getClassLoader()有? –

+0

我在我的問題中添加了類加載器信息。對於「本地」我意味着我們不使用白羊座藍圖,jndi-lookup在一個bundleactivator中調用。 –

回答

1

根據類源位置,看起來你已經將commonj.work類打包到了你的包中。您應該刪除這些以允許從WebSphere Application Server運行時加載它們。

相關問題