Frage

Ich möchte eine webstart Anwendung verteilen, die RMI verwendet.

Ich möchte dem Benutzer die Adresse des RMI-Server zu fragen, zu vermeiden, weil die Website, die die Anwendung verteilt auch die RMI-Server ist.

Darüber hinaus weiß ich nicht die Adresse des Servers bei der Erstellung, deshalb muss die Adresse mit Ad-hoc-Konfiguration in den JNLP hinzugefügt werden, oder die Adresse muss zur Ausführungszeit zur Verfügung gestellt werden. Dies ist die bevorzugte Art und Weise: ist es möglich, dies zu tun

War es hilfreich?

Lösung

Ich habe Java RMI nicht genau verwendet (I nur Java Web Start mit hessischen binär verwendet haben Protokoll für so etwas wie RMI tun), aber zumindest den Teil der Server-Adresse an den Web Start Client-Anwendung von geben sollte einfach sein. Wenn Sie die JNLP-Datei in Ihrer Anwendung generieren, fügen Sie die Adresse als Eigenschaft:

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

Dann in Client-Code zu lesen, dass die Eigenschaft:

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

Ich gehe davon hier die Website, die die Anwendung kennt seine eigene Adresse verteilt:)

Bearbeiten (mit der zusätzlichen Beschränkung von nicht-Adresse bei der Erstellung zu wissen): Hmm, die Website die App eine dynamische oder statische Verteilung?

  1. dynamisch: entweder erzeugen ganze JNLP dynamisch (mit einer JSP-Seite oder dom4j oder was auch immer), oder die „Vorlage“ JNLP XML-Datei lesen und die reale Server-Adresse anstelle ersetzen
  2. statisch:? Ich denke, die Person, die die Website manuell hat entsendet, um die richtige Adresse in der JNLP-Datei zu konfigurieren

Andere Tipps

Wo ich arbeite, wir tun genau dies, und setzen Sie die Hostnamen der RMI-Registrierung in der JNLP als pro Jonik Antwort. In Java 6u10 oder u11 Sun geschlossen mehrere Sicherheitslücken mit Webstart, darunter ein Problem mit dynamischen JNLP. Um alle Sicherheitswarnungen zu erfüllen, müssen Sie eine identische Kopie Ihrer JNLP im Haupt Glas Ihres Programms setzen. Dies ist Dritte Injektion zusätzliche Gläser oder Parameter in Ihren Code zu verhindern. Die Programme werden ohne es laufen, aber die Benutzer eine Vertrauens Mitteilung angezeigt.

Wir tun die Adresse zum Zeitpunkt der Erstellung kennen, aber auch andere dynamische JNLP Probleme hatte und so greifen eine JNLP und eine JAR für jede mögliche Laufzeit Aufbau bietet. Das war eher ein Einsatz Kopfschmerzen für uns eher als ein Problem für die Kunden, aber wenn Sie Ihre Verteilung sind Unterzeichnung dann ist es wert zu kennen.

Die JDK-Quellcode enthält (in den Proben / jnlp / Servlet-Verzeichnis) für ein Servlet, das die entsprechenden Werte in die JNLP-Datei einfügt. Damit können Sie den Host-Namen in die JNLP-Datei einzufügen.

Ich verwende variable Platzhalter in meinem jnlp:

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

Und ein Interceptor Servlet verwendet diese zur Laufzeit zu ersetzen, wie die JNLP an den Client bedient werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top