Pregunta

Quiero distribuir una aplicación webstart que use RMI.

Quiero evitar preguntarle al usuario la dirección del servidor RMI, porque el sitio web que distribuye la aplicación también es el servidor RMI.

Además, no conozco la dirección del servidor en el momento de la compilación, por lo tanto, la dirección debe agregarse con una configuración ad hoc al JNLP, o la dirección debe proporcionarse en el momento de la ejecución. Esta es la forma preferida: ¿es posible hacerlo?

¿Fue útil?

Solución

No he usado Java RMI exactamente (solo he usado Java Web Start con Hessian binary protocolo para hacer algo como RMI), pero al menos la parte de pasar la dirección del servidor a la aplicación cliente de Web Start debería ser fácil. Cuando genere el archivo JNLP en su aplicación, agregue la dirección como una propiedad:

<jnlp>
  [...]
  <resources>
    [...]
    <property name="serverAddress" value="..." />
  </resources>
</jnlp>

Luego, en el código del cliente, lea esa propiedad:

String serverAddress = System.getProperty("serverAddress");

Asumo aquí que el sitio web que distribuye la aplicación conoce su propia dirección :)

Editar (con la limitación adicional de no conocer la dirección en el momento de la compilación): Hmm, ¿el sitio web que distribuye la aplicación es dinámico o estático?

  1. dinámico: generar JNLP completo dinámicamente (con una página JSP o dom4j o lo que sea), o leer la " plantilla " JNLP XML file y reemplace la dirección real del servidor en su lugar
  2. estática: ¿supongo que la persona que implementa el sitio tiene que configurar manualmente la dirección correcta en el archivo JNLP?

Otros consejos

Donde trabajo hacemos exactamente esto, y colocamos el nombre de host del registro RMI en el JNLP según la respuesta de Jonik. En Java 6u10 o u11 Sun cerró varios agujeros de seguridad con Webstart, incluido un problema con JNLP dinámico. Para satisfacer todas las advertencias de seguridad, debe colocar una copia idéntica de su JNLP en el contenedor principal de su programa. Esto es para evitar que terceros inyecten tarros o parámetros adicionales en su código. Los programas se ejecutarán sin él, pero a los usuarios se les mostrará un aviso de confianza.

conocemos la dirección en el momento de la compilación, pero tuvimos otros problemas dinámicos de JNLP y, por lo tanto, tuvimos que recurrir a proporcionar un JNLP y un JAR para cada posible configuración de tiempo de ejecución. Esto fue más un dolor de cabeza de implementación para nosotros, en lugar de un problema para los clientes, pero si está firmando su distribución, entonces vale la pena saberlo.

El JDK incluye el código fuente (en el directorio samples / jnlp / servlet) para un servlet que inserta valores apropiados en el archivo JNLP. Puede usar esto para insertar el nombre de host en el archivo JNLP.

Uso marcadores de posición variables en mi jnlp:

...
<application-desc>
    <argument>{host}</argument>
    <argument>{port}</argument>
</application-desc>
...

Y use un servlet Interceptor para reemplazarlos en tiempo de ejecución a medida que JNLP se sirve al cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top