Domanda

Voglio distribuire un'applicazione webstart che utilizza RMI.

Voglio evitare di chiedere all'utente l'indirizzo del server RMI, perché il sito Web che distribuisce l'applicazione è anche il server RMI.

Inoltre, non conosco l'indirizzo del server al momento della compilazione, pertanto l'indirizzo deve essere aggiunto con una configurazione ad hoc a JNLP, oppure l'indirizzo deve essere fornito al momento dell'esecuzione. Questo è il modo preferito: è possibile farlo?

È stato utile?

Soluzione

Non ho usato Java RMI esattamente (ho usato solo Java Web Start con Hessian binario protocollo per fare qualcosa come RMI), ma almeno la parte del passaggio dell'indirizzo del server all'app client Web Start dovrebbe essere semplice. Quando generi il file JNLP nella tua applicazione, aggiungi l'indirizzo come proprietà:

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

Quindi, nel codice client leggi quella proprietà:

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

Presumo che il sito Web che distribuisce l'applicazione sia a conoscenza del proprio indirizzo :)

Modifica (con l'ulteriore limitazione di non conoscere l'indirizzo al momento della creazione): Hmm, il sito Web che distribuisce l'app è dinamico o statico?

  1. dinamico: genera l'intero JNLP in modo dinamico (con una pagina JSP o dom4j o altro), oppure leggi il "modello" " File XML JNLP e sostituire l'indirizzo del server reale sul posto
  2. statico: immagino che la persona che distribuisce il sito debba configurare manualmente l'indirizzo corretto nel file JNLP?

Altri suggerimenti

Dove lavoro, facciamo esattamente questo e inseriamo il nome host del registro RMI nel JNLP secondo la risposta di Jonik. In Java 6u10 o u11 Sun ha chiuso diverse falle di sicurezza con Webstart, incluso un problema con JNLP dinamico. Al fine di soddisfare tutti gli avvisi di sicurezza, è necessario posizionare una copia identica di JNLP nel barattolo principale del programma. Questo per impedire a terzi di iniettare vasi o parametri extra nel codice. I programmi funzioneranno senza di essa, ma agli utenti verrà mostrato un avviso di fiducia.

Conosciamo l'indirizzo al momento della creazione, ma abbiamo avuto altri problemi JNLP dinamici e quindi abbiamo dovuto ricorrere a fornire un JNLP e un JAR per ogni possibile configurazione di runtime. Questo è stato più un problema per l'implementazione per noi, piuttosto che un problema per i clienti, ma se stai firmando la tua distribuzione, vale la pena saperlo.

Il JDK include il codice sorgente (nella directory samples / jnlp / servlet) per un servlet che inserisce i valori appropriati nel file JNLP. Puoi usarlo per inserire il nome host nel file JNLP.

Uso i segnaposto variabili nel mio jnlp:

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

E usa un servlet Interceptor per sostituirli in fase di esecuzione quando JNLP viene offerto al client.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top