My Oracle Support Banner

"javax.websocket.RemoteEndpoint.Async#sendBinary()" はメッセージ送信前に戻らない (Doc ID 2648797.1)

Last updated on MARCH 12, 2021

適用範囲:

Oracle WebLogic Server - バージョン 12.1.3.0.0 から 12.2.1.4.0 [リリース 12c]
この文書の内容はすべてのプラットフォームに適用されます。

現象

次の RemoteEndpoint.Async#sendBinary() のドキュメントは、"This method returns before the message is transmitted"(このメソッドはメッセージ送信前に戻る)と説明しています。

https://docs.oracle.com/javaee/7/api/javax/websocket/RemoteEndpoint.Async.html#sendBinary-java.nio.ByteBuffer-

しかし、実際に "javax.websocket.RemoteEndpoint.Async#sendBinary()" は、メッセージ送信前に戻りません。(メッセージ送信前に "javax.websocket.RemoteEndpoint.Async#sendBinary()" の処理が完了しません。) 例えば、"RemoteEndpoint.Async#sendBinary()" メソッド実行中に、ネットワークが切断した場合、WLS はこのメソッドを完了できません。そのために、アプリケーションは、"RemoteEndpoint.Async#sendBinary()" を実行した箇所でスタックしているようにみえます。

次は、WebSocketSample#echo() サンプルコードが "RemoteEndpoint.Async#sendBinary()" メソッドを実行した際のスレッドスタックの一例です。サンプル・アプリケーションは、ネットワークが切断された際、次のようにスタックします:

 

変更点

 

原因

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


本書の内容
現象
変更点
原因
解決策
参照情報

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.