Java WebStart lento, solicitando bibliotecas de una carpeta no válida

Problema y pregunta: aplicación Java iniciada en la web que busca sus clases en la carpeta base en lugar de ./lib

Como se sugiere en una pregunta similar enas aplicaciones @Java Web Start solicitan repetidamente archivos no existentes He convertidoapagad la firma jar, para descartar el problema de seguridad, y el problema persiste.

continuación, encuentre el ejemplo limpio de lo que está pasando en la red para este sencillo programa de Java:

public static void main(String[] args) {
    // TODO code application logic here
    System.out.println("Hello World! Initializing the class from the jar residing in lib/ folder. Expecting heavy network traffic...");

    //This class resides in lib/SampleJavaLibrary.jar
    //Initializing it just to excercise the class loader problem
    CDummyClass sDummy = new CDummyClass();

    System.out.println("Done");

}

En la red (por wireshark), se pueden observar solicitudes repetidas de jarras en la carpeta base. En algunas llamadas conté hasta 10 reintentos, respondí por el servidor web con 404. Finalmente, loadClass es exitoso, pero solo después de 10 o más solicitudes de frascos no existentes. Multiplique esto con el número de clases a las que se accede en un programa dado, y terminará con una inicialización muy lenta. En este caso simple, hay "solo" 2 reintentos para esta clase simple.

Todo comienza normal, los frascos están cargados, todo es bueno y agradable:

6   0.020921    192.168.1.35    192.168.1.130   HTTP    GET /mnt/vbox/workspace/WebStartSample/distC/launch.jnlp HTTP/1.1
8   0.028092    192.168.1.130   192.168.1.35    HTTP    HTTP/1.1 200 OK  (application/x-java-jnlp-file)
10  0.514038    192.168.1.35    192.168.1.130   HTTP    GET /mnt/vbox/workspace/WebStartSample/distC/lib/SampleJavaLibrary.jar HTTP/1.1 
11  0.520688    192.168.1.130   192.168.1.35    HTTP    HTTP/1.1 200 OK  (application/java-archive)
12  0.618640    192.168.1.35    192.168.1.130   HTTP    GET /mnt/vbox/workspace/WebStartSample/distC/WebStartSample.jar HTTP/1.1 
14  0.652541    192.168.1.130   192.168.1.35    HTTP    HTTP/1.1 200 OK  (application/java-archive)

Aquí es donde comienza el problema, en la llamada de la clase de biblioteca:

16  0.943801    192.168.1.35    192.168.1.130   HTTP    GET /mnt/vbox/workspace/WebStartSample/distC/SampleJavaLibrary.jar HTTP/1.1 
18  0.991748    192.168.1.130   192.168.1.35    HTTP    HTTP/1.1 404 Not Found  (text/html)
22  0.997281    192.168.1.35    192.168.1.130   HTTP    GET /mnt/vbox/workspace/WebStartSample/distC/SampleJavaLibrary.jar HTTP/1.1 
24  1.004799    192.168.1.130   192.168.1.35    HTTP    HTTP/1.1 404 Not Found  (text/html)

inalmente, después de volver a intentarlo anteriormente, la clase se encuentra e inicializa (!), Muy probablemente desde el jar ya existente, que se cargó al inicio de la aplicación.

Por qué el cargador de clases jnlp busca en la carpeta base, y por qué durante tantos intentos, está más allá de mí. Intenté ejecutar bajo depurador, pero no pude encontrar las fuentes para los cargadores de clases y no pude resolverlo yo mismo.

FWIW aquí está mi archivo jnlp, y sí, probé todas las variaciones de la etiqueta de actualización, perezoso, ansioso, sin cambios

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://mydebian.mydomain/mnt/vbox/workspace/WebStartSample/distC"    href="launch.jnlp" spec="1.0+">
    <information>
        <title>WebStartSample</title>
        <vendor>user</vendor>
        <homepage href=""/>
        <description>WebStartSample</description>
        <description kind="short">WebStartSample</description>

    </information>
<update check="always"/>

    <resources>
<j2se version="1.5+"/>
<jar href="WebStartSample.jar" main="true"/>


    <jar href="lib/SampleJavaLibrary.jar"/>
</resources>
    <application-desc main-class="webstartsample.Main">

    </application-desc>
</jnlp>

Sospecho que hay algo mal con el JNLPClassLoader (), que es el cargador particular utilizado en el inicio web.

Saludos

Robert

Respuestas a la pregunta(3)

Su respuesta a la pregunta