我有一个无状态会话bean,可以创建RuntimeFactory
和Application
对象。这两个类都是Social Business Toolkit的一部分。 Application
用于读取属性和托管bean文件,但这并没有发生,因为RuntimeFactory
无法获取Application
对象。
AbstractRuntimeFactory
有Map
个Application
个对象:
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);
}
在调试期间,我注意到Thread ID保持不变,但有两个不同的ClassLoader
实例。这是怎么发生的?只有一个会话bean,RuntimeFactory和Application。不应该getContextClassLoader()总是给我相同的对象吗?
在我工作的时候,我现在使用:
ClassLoader cl = this.getClass().getClassLoader();
其中this
是RuntimeFactory
,但我不确定这是否是一个好的解决方案..感觉更像是解决实际问题的方法。
ps:我使用WebSphere Portal作为应用服务器。
答案 0 :(得分:3)
在这种情况下,您不需要使用RuntimeFactory,它可能更容易避免。我去年与另一位客户合作过,他们也在使用EJB,他们选择直接实例化他们需要的端点并自行管理端点设置。代码看起来像这样:
BasicEndpoint endpoint = new ConnectionsBasicEndpoint();
endpoint.setUrl(url);
endpoint.setUser(user);
endpoint.setPassword(password);
endpoint.setForceTrustSSLCertificate(true);
BlogService blogService = new BlogService(endpoint);