Как смешать Java WebStart с RMI? - PullRequest
3 голосов
/ 20 января 2009

Я хочу распространить приложение веб-запуска, которое использует RMI.

Я хочу не спрашивать у пользователя адрес сервера RMI, поскольку веб-сайт, распространяющий приложение, также является сервером RMI.

Кроме того, я не знаю адрес сервера во время сборки, поэтому адрес должен быть добавлен с помощью специальной конфигурации к JNLP, или адрес должен быть предоставлен во время выполнения. Это предпочтительный способ: возможно ли это сделать?

Ответы [ 4 ]

2 голосов
/ 20 января 2009

Я не использовал Java RMI точно (я использовал только Java Web Start с Hessian двоичным протоколом для выполнения чего-то вроде RMI), но по крайней мере часть передачи адреса сервера в Интернет Запустить клиентское приложение должно быть легко. Когда вы генерируете файл JNLP в своем приложении, добавьте адрес в качестве свойства:

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

Затем в коде клиента прочитайте это свойство:

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

Я предполагаю, что веб-сайт, который распространяет приложение, знает свой собственный адрес:)

Редактировать (с дополнительным ограничением незнания адреса во время сборки): Хм, сайт, распространяющий приложение, динамический или статический?

  1. динамический: либо динамически генерировать весь JNLP (со страницей JSP, либо с помощью dom4j или чего-либо еще), либо прочитать XML-файл JNLP «шаблона» и заменить реальный адрес сервера на месте
  2. static: я думаю, что человек, который развертывает сайт, должен вручную настроить правильный адрес в файле JNLP?
1 голос
/ 27 февраля 2009

JDK содержит исходный код (в каталоге samples / jnlp / servlet) для сервлета, который вставляет соответствующие значения в файл JNLP. Вы можете использовать это для вставки имени хоста в файл JNLP.

1 голос
/ 27 февраля 2009

Там, где я работаю, мы делаем именно это и помещаем имя хоста реестра RMI в JNLP согласно ответу Jonik. В Java 6u10 или u11 Sun закрыла несколько дыр в безопасности с помощью Webstart, включая проблему с динамической JNLP. Чтобы удовлетворить все предупреждения безопасности, вы должны поместить идентичную копию вашего JNLP в основной файл вашей программы. Это сделано для того, чтобы третьи лица не добавляли в ваш код дополнительные файлы jar или параметры. Программы будут работать без него, но пользователям будет показано уведомление о доверии.

Мы делаем знаем адрес во время сборки, но имели другие динамические проблемы с JNLP и поэтому вынуждены были использовать JNLP и JAR для каждой возможной настройки времени выполнения. Для нас это было скорее головной болью при развертывании, а не проблемой для клиентов, но если вы подписываете свой дистрибутив, это стоит знать.

0 голосов
/ 20 января 2009

Я использую переменные заполнители в моем jnlp:

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

И используйте сервлет-перехватчик для их замены во время выполнения, когда JNLP подается клиенту.

...