JavaストリームをHPタンデムで取得する問題(ノンストップ)
-
20-09-2019 - |
質問
GシリーズからHシリーズまで、タンデムノンストップシステム間で簡単なJavaアプリケーションを移植しています。 Javaバージョンは1.5.0_02です。
クライアントソケットから出力ストリームを取得したり開いたりするなどの基本的なI/Oタスクを実行するとき、私たちは次の例外を受け取ります
java.io.IOException: Value out of range
また
java.net.SocketException: Value out of range
(「範囲外の価値」は、私が思うに、まあ、まったくすべてのためにタンデムネイティブの専門用語です)。
誰かが同様の問題を抱えていますか? IE I/O腐敗は、たとえばJNIをいじりますか?
システムに何か問題があると思いますが、どこにあるのでしょうか?
ありがとうございました。
編集:
要求に従ってスニペットを追加します
サンプルスニペット(a) - 使用 Runtime.exec ()
(適合しました)
Properties envVars = new Properties();
Process p = r.exec("/bin/env");
envVars.load(p.getInputStream());
スタックトレース(a):
java.io.IOException: Value out of range (errno:4034)
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:194)
at java.lang.UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:221)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:254)
at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at util.Environment.getVariables(Environment.java:39)
最後の行は失敗し、出力はコンソール(!)にリダイレクトされます。
サンプルスニペット(b) - 使用 HttpURLConnection
:
public WorkerThread (HttpURLConnection conn, String requestData, Logger logger)
{
this.conn = conn;
...
}
public void run ()
{
OutputStream out = conn.getOutputStream ();
}
スタックトレース(b):
java.net.SocketException: Value out of range (errno:4034)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.Socket.connect(Socket.java:507)
at sun.net.NetworkClient.doConnect(NetworkClient.java:155)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:280)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:337)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:176)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:736)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:162)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:828)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
ケース(a)は、以前のJREバージョン(!)の他の問題の回避策であったため、回避できますが、ソケットでの同じ動作は本当に厄介です。
解決 2
更新:問題は偽物によって引き起こされました .so
図書館。
他のヒント
エラーコード4034は、特定のサーバーがノンストップクラスターで実行されていないことを示しているようです。システムが適切にセットアップされていることを確認してください。
所属していません StackOverflow