Java 返回我自己的EJB的远程JNDI查找
这是我在Stack Overflow的第一个问题,如果我做错了什么,请随时告诉我:) 我正在从事一个涉及EJB和JBoss4.2.3.GA的项目。在某种程度上,我们尝试访问集群的每个节点,定位EJB并返回它 这是执行JNDI查找的一段代码:Java 返回我自己的EJB的远程JNDI查找,java,ejb,jndi,ejb-3.0,jboss-4.2.x,Java,Ejb,Jndi,Ejb 3.0,Jboss 4.2.x,这是我在Stack Overflow的第一个问题,如果我做错了什么,请随时告诉我:) 我正在从事一个涉及EJB和JBoss4.2.3.GA的项目。在某种程度上,我们尝试访问集群的每个节点,定位EJB并返回它 这是执行JNDI查找的一段代码: public static <I> I getCache(Class<I> i, String clusterNode) { ServiceLocator serviceLocator = ServiceLocator.get
public static <I> I getCache(Class<I> i, String clusterNode) {
ServiceLocator serviceLocator = ServiceLocator.getInstance();
String jndi = serviceLocator.getRemoteJNDIName(i);
Properties props = new Properties();
props.setProperty(Context.PROVIDER_URL, "jnp://" + clusterNode + ":"
+ jndiPort);
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming");
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
Object result = null;
try {
InitialContext ctx = new InitialContext(props);
result = ctx.lookup(jndi);
} catch (NamingException e) {
return null;
}
return (I) result;
}
publicstatici-getCache(类I,字符串clusterNode){
ServiceLocator ServiceLocator=ServiceLocator.getInstance();
字符串jndi=serviceLocator.getRemoteJNDIName(i);
Properties props=新属性();
props.setProperty(Context.PROVIDER_URL,“jnp://”+clusterNode+”:“
+jndiPort);
setProperty(Context.URL_PKG_前缀,“org.jboss.naming”);
props.setProperty(Context.INITIAL\u Context\u工厂,
“org.jnp.interfaces.NamingContextFactory”);
对象结果=空;
试一试{
InitialContext ctx=新的InitialContext(道具);
结果=ctx.lookup(jndi);
}捕获(NamingE例外){
返回null;
}
返回(I)结果;
}
在这里:
- clusterNode是一个简单的字符串,带有节点的IP地址或dns名称。例如:“192.168.2.65”或“cluster1”
- getRemoteJNDIName返回如下字符串:“MyEARName/MyEJBName/remote”
jnp.disableDiscovery=true
禁用此行为设置
我想可能有更好的办法
根据代码,您没有捕获从JNDI轮询的对象,这意味着每次需要执行服务时,都必须执行新的查找(这是一个耗时的操作)。ServiceLocator模式建议缓存查找结果以提高性能。您的配置是否有可能回退到localhost?
clusterNode
的值是什么?clusterNode是一个简单的字符串,带有节点的IP地址或dns名称。例如:“192.168.2.75”或“cluster1”。谢谢你的回答。正如你所说,所有节点都处于“全部”模式,所以我想你是对的。我会尽快试一试。关于缓存,实际上我们正在缓存JNDI调用以避免新的查找。只需使用简化代码来澄清问题:)