Weblogic RMI Call是支持Timeout的,注意仅针对非事务的方法,配置如下:
The following entry causes a remote RMI client to timeout after waiting 5 seconds.
异常:
weblogic.rmi.extensions.RequestTimeoutException: RJVM response timed out after: '10000' milliseconds.
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:248)
at TestEJB_n1fsdc_EOImpl_815_WLStub.test(Unknown Source)
at TestClient.main(TestClient.java:23)
使用的指引:
This feature provides a work around for legacy systems where the behavior of asynchronous calls is desired but not yet implemented. BEA recommends legacy systems implement more appropriate technologies if possible, such as:(建议用以下方式代替)
If you need to use the RMI timeout for a legacy sytem, review the following guidelines:
- The RMI timeout should be used only when the following three conditions are met:(约束)
- There is no transparent failover to another cluster node when a request times out.
RequestTimeOutException
is always propogated to the caller. - The server continues to process requests that have timed out. The client is required check the state of the request on the server before reattempting the call.
- If a server times out, the client has the ability to mark the server as unreachable in the client side cluster reference. This prevents calls from being directed to the marked server for a specified time.