Problema de obtener transmisiones Java en tándem HP (sin parar)
-
20-09-2019 - |
Pregunta
Estamos portando una aplicación Java simple entre los sistemas en tándem sin parar, desde la serie G hasta la serie H. La versión Java es 1.5.0_02.
Al realizar tareas de E/S básicas como obtener la transmisión de salida o abrir un socket de cliente, recibimos excepciones como
java.io.IOException: Value out of range
o
java.net.SocketException: Value out of range
("Valor fuera de rango" es jerga nativa en tándem para, bueno, todo lo que supongo).
¿Alguien tiene problemas similares? es decir, la corrupción de E/S mientras, por ejemplo, jugando con JNI?
Supongo que hay algo mal con el sistema, pero ¿dónde podría estar?
Gracias.
EDITAR:
Agregar fragmentos según lo solicitado
Muestra de fragmento (a) - usando Runtime.exec ()
(adaptado)
Properties envVars = new Properties();
Process p = r.exec("/bin/env");
envVars.load(p.getInputStream());
Stack Trace (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)
La última línea falla, y la salida se redirige a la consola (!).
Muestra de fragmento (b) - usando HttpURLConnection
:
public WorkerThread (HttpURLConnection conn, String requestData, Logger logger)
{
this.conn = conn;
...
}
public void run ()
{
OutputStream out = conn.getOutputStream ();
}
Rastreo de pila (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)
El caso (a) se puede evitar porque fue una solución para otros problemas con la versión JRE anterior (!), Pero el mismo comportamiento con los enchufes es realmente desagradable.
Solución 2
ACTUALIZACIÓN: El problema fue causado por un espurio .so
biblioteca.
Otros consejos
El código de error 4034 parece indicar que un servidor específico no se está ejecutando en su clúster sin parar. ¿Estás seguro de que tu sistema está configurado correctamente?