通過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/
「本地OSGi環境」是什麼意思?你是否想從WAB訪問課程?你有沒有把commonj.work類包含進你的包中? WorkManager.class.getClassLoader()和WorkManager.class.getProtectionDomain()。getCodeSource()。getLocation()和ic.lookup(...)。getClass()。loadClass(WorkManager.class.getName() ))。getClassLoader()有? –
我在我的問題中添加了類加載器信息。對於「本地」我意味着我們不使用白羊座藍圖,jndi-lookup在一個bundleactivator中調用。 –