Смекни!
smekni.com

Технология развертывания приложений Java Web Start (стр. 2 из 3)

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 - это скорее всего каталог: ...&bsol;jboss&bsol;catalina&bsol;

Находим конфигурационный файл - ...&bsol;jboss&bsol;catalina&bsol;conf&bsol;web.xml.

В последних версиях JBoss 3.2.x данный файл необходимо искать в каталоге: ...&bsol;jboss-3.2.3&bsol;server&bsol;default&bsol;deploy&bsol;jbossweb-tomcat41.sar&bsol;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 файле, это будет - ..&bsol;application.war

...&bsol;jboss-3.2.1&bsol;server&bsol;default&bsol;deploy&bsol;application.war&bsol;

В данном случае содержимое WAR приложения выглядит так:

&bsol;application.war&bsol;

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

&bsol;application.war&bsol;WEB-INF&bsol;

jboss-web.xml

web.xml <- файлдескриптор Web-приложения

&bsol;application.war&bsol;WEB-INF&bsol;lib&bsol;

jardiff.jar <- библиотеки, содержащие классы,

jnlp-servlet.jar необходимые для поддержки JNLP сервером, которые

jnlp.jar доступны из "JNLP пакета разработчика"

3 Добавление необходимых параметров в web.xml файл WAR-приложения

Кроме этого необходимо, описать необходимые настроечные параметры у нашего Web-приложения в файле ...&bsol;jboss-3.2.1&bsol;server&bsol;default&bsol;deploy&bsol;application.war&bsol;WEB-INF&bsol;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-приложение - каталог где хранятся библиотеки приложения ...&bsol;application.war&bsol;WEB-INF&bsol;lib&bsol;

Теперь опишем как выглядит индексная страница, с которой осуществляется установка и запуск наших клиентских приложений на локальных ПК пользователей. Простейший вид страницы 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