我有一个EJB类用于搜索功能。
@Local(ILuceneEmployeeSearchManagerLocal.class)
@Remote(ILuceneEmployeeSearchManagerRemote.class)
public class LuceneEmployeeSearchManager implements ILuceneEmployeeSearchManagerLocal, ILuceneEmployeeSearchManagerRemote{
....
}
在同一个EAR项目中的WAR项目中,存在另一个类可以访问这个类。
public class EmployeeAccessor {
private ILuceneEmployeeSearchManagerRemote searcher;
public EmployeeMstAccessor() {
Context ic = null;
try {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "<WHAT_TO_PUT_HERE>");
props.put(Context.PROVIDER_URL, "iiop://127.0.0.1:9083");
ic = new InitialContext(props);
this.searcher = (ILuceneEmployeeSearchManagerRemote) ic
.lookup("<WHAT_TO_PUT_HERE?>");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
....
}
当我使用JNDI执行本地查找时,一切都运作得很完美。由于一些要求,现在需要将EAR部署在多个AP(无论是集群还是非集群环境)。另外,使用的应用服务器将在不同的AP上相同,但可能不一定是Websphere,也就是说所有AP都可以使用JBoss / Websphere / Weblogic。
我的问题是是否存在实现独立的方式来查找和调用远程EJB?这样就可以在Websphere,Weblogic或JBoss环境(同质环境)中使用。
我的第二个问题是假设AP服务器正在运行Websphere(在集群或非集群环境下),如果我希望所有AP服务器上的EmployeeAccessor都使用部署在AP01(ip:x.x.x.x,port:yy)中的LuceneEmployeeSearchManager EJB,该如何配置?是否必须给出完整的JNDI名称(包括Websphere的单元格名称和节点名称)?INITIAL_CONTEXT_FACTORY的正确值是什么?正确的JNDI查询语法是什么?
感谢任何帮助 :)