我有一个连接到EJB的应用程序来检索一些数据。 EJB位于单独的EAR中。 该应用程序使用委托单例模式来获取与EJB的连接。问题是,EJB经常被重新部署,因为它仍在开发中,每次发生这种情况时,我的应用程序最终断开连接,并且当EJB重新联机时无法重新连接,因为单例的getInstance方法不断返回空的远程对象引用和连接无法重新建立,所以我必须重新部署我的客户端应用程序才能重新连接。 有什么方法可以防止这种情况发生,这不涉及对每个请求进行查找吗?
public class Delegate
{
...
private DataStoreService getDataStoreServiceInterface {
ServiceLocator serviceLocator = ServiceLocator.getInstance();
return serviceLocator.getDataStoreService();
}
public Data getData(){
DataStoreService dataStoreService = getDataStoreServiceInterface();
return dataStoreService.getData();
}
}
public class ServiceLocator{
private static ServiceLocator instance = null;
private DataStoreService dataStoreService = null;
protected Context context;
private ServiceLocator(){
context = new InitialContext();
dataStoreService = (DataStoreService)context.lookup(DataStoreService.class.getName());
}
static public ServiceLocator getInstance(){
if (instance == null) {
instance = new ServiceLocator();
}
return instance;
}
}
答案 0 :(得分:0)
显然这是Weblogic 10.3.6中的容器错误,我不得不删除单例逻辑以避免此问题
答案 1 :(得分:-1)
不要使用单例模式,而项目处于开发模式,因此每次调用getInstance都会返回一个新实例。此外,在您编写获取EJB实例的类的方式中,您将遇到问题,因为应用程序中只有一个线程可以调用该EJB,因为在使用EJB时,没有人可以使用它实例,并且在您的所有应用程序中只使用一个相同的ejb实例。
另一种方式,它使用Singleton会话bean(EJB)而不是使用Singleton Pattern。