アプリケーションは 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 ルックアップで動作させようとしましたが、今まで成功しませんでした。URLをどうしようか悩んでいます。RMI ネーミングからの取得は、次のように行われます。 java.rmi.Naming.lookup("//host:port/FactoryObject")
これを JNDI URL に変換するにはどうすればよいですか? プロトコルとして t3 を使用し、iiop を使用してみました。何も機能しませんでした。私はいつも命名例外を受け取ります。
t3 の場合、次の例外が発生します。[ルート例外は java.net.ConnectException: t3://host:port: Destination unreachable; ネストされた例外: java.io.IOException: Empty server reply; 宛先への利用可能なルーターがありません]
iiop の場合、次の例外が発生します: javax.naming.CommunicationException: Cannot connect to ORB [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No]
何か案は ?