Jakarta ee 重新启动后失去与EJB的连接
我有一个连接到EJB的应用程序来检索一些数据。EJB位于单独的EAR中。 应用程序正在使用委托单例模式来获得到EJB的连接。问题是,EJB经常被重新部署,因为它仍在开发中,每次这种情况发生时,当EJB重新联机时,我的应用程序都会断开连接,无法重新连接,因为singleton的getInstance方法不断返回空的远程对象引用,并且无法重新建立连接,所以我必须重新部署我的客户端应用程序才能重新连接。 有没有什么方法可以防止这种情况发生,而不是对每个请求都进行查找Jakarta ee 重新启动后失去与EJB的连接,jakarta-ee,delegates,ejb,lookup,service-locator,Jakarta Ee,Delegates,Ejb,Lookup,Service Locator,我有一个连接到EJB的应用程序来检索一些数据。EJB位于单独的EAR中。 应用程序正在使用委托单例模式来获得到EJB的连接。问题是,EJB经常被重新部署,因为它仍在开发中,每次这种情况发生时,当EJB重新联机时,我的应用程序都会断开连接,无法重新连接,因为singleton的getInstance方法不断返回空的远程对象引用,并且无法重新建立连接,所以我必须重新部署我的客户端应用程序才能重新连接。 有没有什么方法可以防止这种情况发生,而不是对每个请求都进行查找 public class Dele
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;
}
}
当项目处于开发模式时,不要使用单例模式,因此每次调用getInstance时都会返回一个新实例。此外,在编写获取EJB实例的类的方式中,您将遇到一个问题,因为应用程序中只有一个线程可以调用该EJB,因为虽然EJB正在使用,但没有人可以使用该实例,并且在所有应用程序中只使用一个相同的EJB实例
另一种方法是使用单例会话bean(EJB),而不是使用单例模式。显然这是Weblogic 10.3.6中的一个容器错误,我必须删除单例逻辑以避免这个问题。捕获远程EJB引用是一种很好的常见做法,您应该检查您的服务器版本是否存在与此问题相关的错误。“您将遇到问题,因为您的应用程序中只有一个线程可以调用该EJB,因为尽管EJB正在使用,但没有人可以使用该实例。”这完全错了,EJB不是这样工作的。我建议您阅读有关远程代理概念和EJB生命周期的内容。是否提供引用或更多信息?这是一个非常低质量的答案。