Java 如何在WebSphere7.0中为ejb查找设置超时
我开发了一个独立的Javase客户端,它对远程服务器执行EJB查找并执行其方法 在一些奇怪、神奇但罕见的情况下,我的程序无法正常挂起,在查看问题内部时,似乎在服务器上查找ejb时,我从未收到服务器的响应,也从未超时Java 如何在WebSphere7.0中为ejb查找设置超时,java,websphere,ejb-3.0,jndi,websphere-7,Java,Websphere,Ejb 3.0,Jndi,Websphere 7,我开发了一个独立的Javase客户端,它对远程服务器执行EJB查找并执行其方法 在一些奇怪、神奇但罕见的情况下,我的程序无法正常挂起,在查看问题内部时,似乎在服务器上查找ejb时,我从未收到服务器的响应,也从未超时 我想知道是否有一个属性或任何其他方式可以用来在客户端或服务器端设置查找时间。您可以尝试以下代码,该代码执行任务,然后最多在指定的时间等待 Future<Object> future = executorService.submit(new Callable<Obje
我想知道是否有一个属性或任何其他方式可以用来在客户端或服务器端设置查找时间。您可以尝试以下代码,该代码执行任务,然后最多在指定的时间等待
Future<Object> future = executorService.submit(new Callable<Object>() {
public Object call() {
return lookup(JNDI_URL);
}
});
try {
Object result = future.get(20L, TimeUnit.SECONDS); //- Waiting for at most 20 sec
} catch (ExecutionException ex) {
logger.log(LogLevel.ERROR,ex.getMessage());
return;
}
Future-Future=executorService.submit(新的可调用(){
公共对象调用(){
返回查找(JNDI_URL);
}
});
试一试{
对象结果=future.get(20L,TimeUnit.SECONDS);/-最多等待20秒
}catch(ExecutionException ex){
logger.log(LogLevel.ERROR,例如getMessage());
返回;
}
此外,该任务可以通过
future.cancel(true)
远程JNDI使用ORB来取消,因此唯一可用的选项是com.ibm.CORBA.RequestTimeout
,但这将影响所有远程调用。如中所述,默认值为180(3分钟)。有一篇非常好的文章在中讨论了ORB配置最佳实践。我引用了可以在客户端配置的三种不同设置(您在远程服务器上执行查找和执行方法时)
- 连接超时:在客户端ORB甚至可以向服务器发送请求之前,它需要建立IIOP连接(或重新使用
现有的一个)。在正常情况下,IIOP和底层TCP
连接操作应该很快完成。然而,关于
网络或其他不可预见的因素可能会减慢速度。这个
默认连接超时不确定,但ORB自定义属性
(以秒为单位)可用于更改 超时com.ibm.CORBA.ConnectTimeout
- 定位请求超时:建立连接后,客户端向服务器发送RMI请求,然后定位请求超时 可用于限制CORBA LocaateRequest(CORBA)的时间 对象的“ping”)。因此,LocateRequestTimeout应该 小于或等于RequestTimeout,因为它是一个 就来回发送的数据而言,操作更短。像 RequestTimeout,LocateRequestTimeout默认为180秒
- 请求超时:一旦客户端ORB与服务器建立了TCP连接,它将跨服务器发送请求。但是, 不会无限期地等待响应,默认情况下它将等待 180秒。这是ORB请求超时时间间隔。这个可以 通常会降低,但应符合预期 来自服务器的应用程序响应时间
嗯,这是一个很好的解决方案,甚至我认为类似的实现使用了一个单独的线程。但我正在寻找一个参数或属性,我可以设置,以便库本身处理超时。“有类似的事情吗?”阿克汉德普拉塔普辛格如果这能完成你正在尝试的,为什么要去图书馆。您可以在属性文件中配置超时持续时间。石英可能会有帮助,但对我来说似乎太过分了。嗯。。。不应该有WAS配置参数吗?@ukaszSiwiński客户端是Java SE&在那里执行查找。我猜客户没有在WAS上运行。谢谢你的文章Kurtcebe,它真的回答了我要找的东西。