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




Я точно не использовал Java RMI (я использовал Java Web Start с бинарным протоколом Гессен только для чего-то вроде RMI), но, по крайней мере, часть передачи адреса сервера клиентскому приложению Web Start должна быть простой. Когда вы создаете файл JNLP в своем приложении, добавьте адрес как свойство:
<jnlp>
[...]
<resources>
[...]
<property name = "serverAddress" value = "..." />
</resources>
</jnlp>
Затем в клиентском коде прочтите это свойство:
String serverAddress = System.getProperty("serverAddress");
Я предполагаю, что веб-сайт, распространяющий приложение, знает свой адрес :)
Редактировать (с дополнительным ограничением незнания адреса во время сборки): Хм, веб-сайт, распространяющий приложение, является динамическим или статическим?
И в сочетании с JnlpDownloadServlet (java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/…) вы можете легко написать: ... value = "$$ codebase".
Я использую заполнители переменных в своем jnlp:
...
<application-desc>
<argument>{host}</argument>
<argument>{port}</argument>
</application-desc>
...
И используйте сервлет-перехватчик, чтобы заменить их во время выполнения, когда JNLP обслуживается клиентом.
Там, где я работаю, мы делаем именно это и помещаем имя хоста реестра RMI в JNLP в соответствии с ответом Джоника. В Java 6u10 или u11 Sun закрыла несколько дыр в безопасности с помощью Webstart, включая проблему с динамическим JNLP. Чтобы удовлетворить все предупреждения системы безопасности, вы должны поместить идентичную копию вашего JNLP в основную банку вашей программы. Это сделано для того, чтобы третьи стороны не добавляли в ваш код дополнительные файлы jar-файлов или параметров. Программы будут работать без него, но пользователям будет показано уведомление о доверии.
Мы, делать, знаем адрес во время сборки, но у нас были другие проблемы с динамическим JNLP, и поэтому пришлось прибегать к предоставлению JNLP и JAR для каждой возможной настройки среды выполнения. Для нас это было больше головной болью при развертывании, чем проблемой для клиентов, но если вы подписываете свой дистрибутив, то об этом стоит знать.
JDK включает исходный код (в каталоге samples / jnlp / servlet) для сервлета, который вставляет соответствующие значения в файл JNLP. Вы можете использовать это, чтобы вставить имя хоста в файл JNLP.
Спасибо! Я изменил вопрос в соответствии с вашим ответом, чтобы более полно отразить мои потребности.