href="application.jnlp" - название JNLP файла-дескриптора, который описывает наше приложение. Данный параметр также можно заменить "специальной переменой", фактическое значение которой jnlp-сервлет поставит при обработке запроса. href="$$name"
В разделе ресурсов, есть указание использования JRE версии 1.3 и более новых - <j2se version="1.3+"/>. Элемент <resources> может содержать 6 различных подэлементов, таких как: jar, nativelib, j2se, property, package и extension. Подробности и правила можно найти в документации.
<jar href="main_gui.jar" main="true"/> - Указание библиотеки, в которой находятся классы нашего приложения, при этом параметр main="true", указывает, что данный JAR архив содержит запускаемый класс GUI приложения.
<jar href="jboss-client.jar"/> - далее перечислены все необходимые библиотеки, которые будут получены с сервера и кэшированы на клиенте
<property name="java.naming.provider.url" value="localhost:1099"/> - так мы можем перечислить все, передаваемые в качестве параметров запуска приложению свойства, которые получаются вызовом System.getProperty(....)
<application-desc main-class="com.my_company_name.client.Application" /> - указаниеполногозапускаемогокласса. JWS также поддерживает запуск Applet-ов. В этом случае вместо тэга <application-desc> используется тэг <applet-desc>. Принцип написания и параметры - смотрите в документации.
Что касается элемента <information> JNLP файла. В данном тэге значения подэлементов <title> и другие, наверное, пока что лучше указывать на английском языке. В последней версии Java Web Start (1.2) из версии JDK 1.4.2_04-b05 название на русском языке в JNLP файле, вызвали ошибку при конвертировании русских букв. Ошибканаблюдаласьвлоге JBoss (server.log):
ERROR [org.jboss.web.localhost.Engine] Internal error:sun.io.MalformedInputException
at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java:90)
at java.io.InputStreamReader.convertInto(InputStreamReader.java:137)
at java.io.InputStreamReader.fill(InputStreamReader.java:186)
.................
at com.sun.javaws.servlet.JnlpDownloadServlet.doGet(JnlpDownloadServlet.java:79)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
...................................
JNLP файл имеет также дополнительные параметры и позволяет указывать разные ресурсы приложения в зависимости от: версии самого приложения, версии операционной системы, платформы, "локали" - т.е. поддерживает "версионность" приложений по разным критериям. В качестве ресурсов можно также указывать "native" библиотеки (например, DLL, SO), используемые вашим приложением. Если вашему приложению требуется доступ к локальным файлам или другие права на локальном ПК, то для этого существует раздел <security>, который необходимо также описать. При необходимости доступа к локальным ресурсам на ПК, например файлов, все библиотеки вашего приложения должны быть подписаны сертификатом, который можно сгенерировать самостоятельно. Все подробности и правила описания можно найти в документации.
Для создания JNLP деплоймент файлов можно использовать свободно распространяемый "DeployDirector" от Sitraka Software, подробности можно узнать на сайте производителя.
Настройка поддержки JNLP (Java Network Launching Protocol) на сервере JBoss 3.x.x с установленным Web-контейнером Apache TomCat
Настроить JNLP на сервере JBoss, который использует в качестве Web-контейнера Mortbay Jetty вполне возможно аналогичным способом. Нужно только внимательно посмотреть и найти файлы настроек в JAR архивах данного Web-контейнера, в которые понадобиться внести аналогичные добавления.
Итак, какие изменения вносят на сервере...
1 Добавление поддержки новых MIME типов в Apache TomCat
Мы выполним данную настройку "глобально" для всего TomCat, чтобы этот MIME тип был описан для всех Web-приложений контейнера, но такого же эффекта можно добиться, если добавить дополнительные MIME типы только в web.xml отдельного web-приложения, которое будет вами сделано на сервере для деплоймента клиенского ПО. Для добавления новых MIME типов, мы находим в каталоге JBoss, подкаталог в котором установлен TomCat. В случае JBoss 3.x - это скорее всего каталог: ...\jboss\catalina\
Находим конфигурационный файл - ...\jboss\catalina\conf\web.xml.
В последних версиях JBoss 3.2.x данный файл необходимо искать в каталоге: ...\jboss-3.2.3\server\default\deploy\jbossweb-tomcat41.sar\web.xml
В данном файле находим раздел, где описаны MIME типы, проверяем есть ли они уже в списке описанных. jnlp, jar - обычно уже есть, а вот jardiff - скорее всего необходимо добавить. При их полном отсутствии добавляем, например в начало списка, еще три дополнительных типа:
web.xml
.......
<!-- ===================== Default MIME Type Mappings =================== -->
<mime-mapping> <extension>jnlp</extension> <mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping> <mime-mapping> <extension>jar</extension> <mime-type>application/x-java-archive</mime-type> </mime-mapping>
<mime-mapping> <extension>jardiff</extension>
<mime-type>application/x-java-archive-diff</mime-type>
</mime-mapping>.............................
Если дать "грубое пояснение", то этими действиями мы указали Web-контейнеру выполнять "специальную интерпретацию" файлов с расширениями - jnlp, jar, jardiff. После HTTP запроса (request) клиентом у контейнера файла-ресурса с одним из указанных расширений, контейнер должен поставить в заголовке HTTP ответа (response) соответствующий "Content-Type", равный - application/x-java-jnlp-file, application/x-java-archive, application/x-java-archive-diff. При этом указанное "Content-Type" значение в HTTP ответе, позволит Java Web Start на стороне клиента, обработать данный поток данных "специальным образом".
Замечание: Будьте внимательны с тем, что можно легко перепутать расширение файлов *.jnlp, ошибочно назвав *.jnpl, как в настройках Web-контейнера, так и в названиях файлов.
2Создание архива Web-приложения (WAR), предназначенного длядеплоймента Java-приложения на локальные ПК
В каталоге JBoss, предназначенного для деплоймоента J2EE приложений, создадим новое Web-приложение. Его можно создать любым удобным способом, например: пусть это будет "default" конфигурация. Внутри деплоймент-каталога, создаем каталог web-приложения с названием, указанным в JNLP файле, это будет - ..\application.war
...\jboss-3.2.1\server\default\deploy\application.war\
В данном случае содержимое WAR приложения выглядит так:
\application.war\
index.html <-- Файл содержащий URL-ссылку на JNLP файл
клиентского Java-приложения
application.jnlp <- специально написанный XML файл с раширением jnlp,
описывающий состав и параметры клиентского приложения
main_gui.jar <- главные архивы классов клиентского приложения
main_gui_lib.jar
jboss-client.jar <- библиотеки необходимые для выполнения
jboss-common-client.jar приложения на ПК пользователя
jboss-j2ee.jar
jbossmq.jar
jbosssx-client.jar
jnp-client.jar
xercesImpl.jar
xmlParserAPIs.jar
\application.war\WEB-INF\
jboss-web.xml
web.xml <- файлдескриптор Web-приложения
\application.war\WEB-INF\lib\
jardiff.jar <- библиотеки, содержащие классы,
jnlp-servlet.jar необходимые для поддержки JNLP сервером, которые
jnlp.jar доступны из "JNLP пакета разработчика"
3 Добавление необходимых параметров в web.xml файл WAR-приложения
Кроме этого необходимо, описать необходимые настроечные параметры у нашего Web-приложения в файле ...\jboss-3.2.1\server\default\deploy\application.war\WEB-INF\web.xml. Согласно документации в него нужно дописать следующие настройки:
<?xml version="1.0"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>JnlpDownloadServlet</servlet-name>
<servlet-class>com.sun.javaws.servlet.JnlpDownloadServlet</servlet-class>
</servlet> <servlet-mapping> <servlet-name>JnlpDownloadServlet</servlet-name> <url-pattern>*.jnlp</url-pattern>
</servlet-mapping>
<welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
<web-app>
Еще одно из требований для корректной работы JNLP сервлета, описанного в примере настройки - это наличие XML парсера. Для этого необходимо, чтобы либо сам Web-контейнер был запущен с помощью JRE 1.4 , в которой парсер интегрирован, или чтобы парсер был доступен серверу как библиотека. В нашем случае, т.к. JBoss имеет в поставке XML парсер (Xerces), никаких дополнительных действий делать не надо. В случае если ваша ситуация отличается, то добавьте парсер в Web-приложение - каталог где хранятся библиотеки приложения ...\application.war\WEB-INF\lib\
Теперь опишем как выглядит индексная страница, с которой осуществляется установка и запуск наших клиентских приложений на локальных ПК пользователей. Простейший вид страницы index.html :
index.html
<html><head><title>Клиентские приложения</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-1251"></head>
<body><h3><center>
Внутренние корпоративные клиентские приложения.
</center></h3><ul><li>Клиентское приложение 1.0.x :
<a href="application.jnlp">Клиент 1.0</a></ul>
</body>
</html>
Страница имеет ссылку, указывающую на JNLP файл нашего приложения. По нажанию ссылки в браузере, будет происходит загрузка и запуск Java-приложения на клиентском ПК.
Запуск
Все готово к первому запуску Java-приложения. Запускаем JBoss, сначала WAR-приложение должно успешно задеплоиться. В логах вы должны увидеть приблизительно следующее:
server.log
INFO[org.jboss.deployment.MainDeployer] Startingdeploymentofpackage:
file:/....../jboss/server/default/deploy/application.war/INFO [org.jboss.web.catalina.EmbeddedCatalinaServiceSX] deploy, ctxPath=/application,
warUrl=file:/...../jboss/server/default/deploy/application.war/
............................................
............................................
INFO [org.jboss.deployment.MainDeployer] Successfully completed deployment of package:
file:/......./jboss/server/default/deploy/application.war/
Если этого не произошло, нужно перепроверить все настройки и параметры Web-приложения.
Заходим с помощью IE на страницу нашего Web-приложения по адресу, например, http://localhost:8080/application/
На странице мы должны увидеть нашу ссылку на JNLP файл в виде - http://localhost:8080/application/application.jnlp
Щелкнув на ней мы должны увидеть Splash-скрин запуска Java Web Start.
После этого на сервере в логе должны появиться записи об обращении к JNLP-сервлету примерно такого вида:
server.log
INFO [org.jboss.web.localhost.Engine] JnlpDownloadServlet: initINFO [org.jboss.web.localhost.Engine] InitializingINFO [org.jboss.web.localhost.Engine] Request: /application/application.jnlpINFO [org.jboss.web.localhost.Engine] User-Agent: Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
INFO [org.jboss.web.localhost.Engine] DownloadRequest[path=/application.jnlp
isPlatformRequest=false]
INFO [org.jboss.web.localhost.Engine] Basic Protocol lookupINFO [org.jboss.web.localhost.Engine] JnlpResource: JnlpResource[WAR Path:
/application.jnlp