重启后失去与EJB的连接

时间:2014-11-14 15:03:13

标签: java-ee delegates ejb lookup service-locator

我有一个连接到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;
  }
}

2 个答案:

答案 0 :(得分:0)

显然这是Weblogic 10.3.6中的容器错误,我不得不删除单例逻辑以避免此问题

答案 1 :(得分:-1)

不要使用单例模式,而项目处于开发模式,因此每次调用getInstance都会返回一个新实例。此外,在您编写获取EJB实例的类的方式中,您将遇到问题,因为应用程序中只有一个线程可以调用该EJB,因为在使用EJB时​​,没有人可以使用它实例,并且在您的所有应用程序中只使用一个相同的ejb实例。

另一种方式,它使用Singleton会话bean(EJB)而不是使用Singleton Pattern。