2014-04-24 104 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

相关问题