Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

  • dynamic: либо генерировать весь JNLP динамически (со страницей JSP, либо с dom4j, либо с чем угодно), либо прочитайте " template " XML-файл JNLP и замените реальный адрес сервера на месте
  • static: я полагаю, что человек, который развертывает сайт, должен вручную настроить правильный адрес в файле JNLP?
  • Другие советы

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top