我们的应用程序在一个 8 节点 Weblogic 集群中运行,并试图与 RMI 服务器通信。由于 RMI 服务器中的错误,执行此操作的线程会卡住。我们正在尝试解决这个问题,但问题是在那之前,卡住的线程会减慢应用程序的速度,最终导致整个集群瘫痪。
我的问题是“我们如何从客户端确保线程被释放?”
任何帮助是极大的赞赏。
实施细节: - Weblogic 10.0MP2,8 个节点的集群 - Java 1.5
线程转储片段:
"[STUCK] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=3 tid=0x03808610 nid=0x1c9 runnable [0
x3ed4e000..0x3ed4faf0]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
- locked <0xa0a515a0> (a java.io.BufferedInputStream)
at java.io.DataInputStream.readByte(DataInputStream.java:241)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:189)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at com.kpno.in.iac.CustomerBridge.CustomerBridge.RemoteDecorator_Stub.sendMessage(Unknown Source)
at com.kpno.in.iac.CustomerBridge.RMIServer.CustomerBridgeProxy.sendMessage(Unknown Source)
应用程序片段(反编译):
public final class RemoteDecorator_Stub extends RemoteStub
implements ...
{
...
public Map sendMessage(String paramString1, String paramString2, Map paramMap)
throws InvalidActionException, ProcessingException, PropagationException, ResponseException, TimeoutException, RemoteException
{
try
{
Object localObject = this.ref.invoke(this, $method_sendMessage_2, new Object[] { paramString1, paramString2, paramMap }, 6494150482049562645L);
return (Map)localObject;
}
catch ...
更新
我试图让它与 Tolis 提议的 JNDI 查找一起工作,但直到现在我还没有成功。我想知道网址应该是什么。从 RMI 命名中检索如下: java.rmi.Naming.lookup("//host:port/FactoryObject")
如何将其翻译为 JNDI url?我已经尝试使用 t3 作为协议并使用 iiop。没有任何效果。我总是得到一个命名异常。
在 t3 的情况下,我得到这个异常:[Root exception is java.net.ConnectException: t3://host:port: Destination unreachable; 嵌套异常是:java.io.IOException: Empty server reply;目的地没有可用的路由器]
如果是 iiop,我会收到此异常:javax.naming.CommunicationException:无法连接到 ORB [根异常是 org.omg.CORBA.COMM_FAILURE:vmcid:SUN 次要代码:201 已完成:否]
有任何想法吗 ?