2014-04-24 143 views
0

我有一個無狀態會話bean,它創建一個RuntimeFactoryApplication對象。這兩個課程都是Social Business Toolkit的一部分。 Application用於讀取屬性和受管Bean文件,但是這並未發生,因爲RuntimeFactory無法獲取Application對象。Thread.currentThread()。getContextClassLoader()返回多個對象實例

AbstractRuntimeFactory具有MapApplication對象:

private Map<ClassLoader,AbstractApplication> applications = new HashMap<ClassLoader, AbstractApplication>(); 

ClassLoader是使用此方法設置:

protected ClassLoader getContextClassLoader() { 
    return Thread.currentThread().getContextClassLoader(); 
} 

Application對象與該方法檢索到:

public Application getApplicationUnchecked() { 
    ClassLoader cl = getContextClassLoader(); 
    return applications.get(cl); 
} 

都靈g調試我注意到線程ID保持不變,但有兩個不同的ClassLoader實例。這是如何發生的?只有一個會話bean,RuntimeFactory和Application。不應該getContextClassLoader()總是給我同樣的對象嗎?

正如我解決我現在使用:

ClassLoader cl = this.getClass().getClassLoader(); 

哪裏thisRuntimeFactory,但我不知道這是一個很好的解決方案。它給人的感覺更像一個解決方法的實際問題。

ps:我正在使用WebSphere Portal作爲應用程序服務器。

+0

是你的類裝載家長首先還是家長最後? –

+0

這是PARENT_LAST。 – magnetronnie

回答

3

在這種情況下,您不需要使用RuntimeFactory的東西,它可能更容易避免它。去年我和另一位使用EJB的客戶一起工作,他們選擇直接實例化他們需要的端點並自己管理端點設置。該守則將是這個樣子:

BasicEndpoint endpoint = new ConnectionsBasicEndpoint(); 
    endpoint.setUrl(url); 
    endpoint.setUser(user); 
    endpoint.setPassword(password); 
    endpoint.setForceTrustSSLCertificate(true); 

    BlogService blogService = new BlogService(endpoint); 
+0

我試圖在沒有RuntimeFactory的情況下工作一段時間,但我需要Application和Context來處理一些事情,例如使用OAuth時重定向到SmartCloud。我正在考慮使用HashMap ,而不是Classloader。每個用戶存儲一個應用程序實例還是要謝謝你的幫助 :) – magnetronnie

相關問題