Javaws

Материал из BiTel WiKi

Перейти к: навигация, поиск

Содержание

Описание

Технология Java Web Start позволяет загружать и запускать приложения Java по сети. В случае с биллингом это выглядит следующим образом:

  1. Клиент вводит URL в браузере или запускает .bat(.sh)-файл
  2. Запускается java, с локального сервера биллинга скачиваются актуальные клиентские библиотеки и настройки подключения и JVM
  3. Запускается привычный BGBillingClient

Java Web Start также кэширует библиотеки локально, если они не изменились. Кэш можно посмотреть через Java Control Panel -> Temporary Internet Files -> View...

В составе сервера биллинга идут следующие файлы для работы клиента через Java Web Start:

bgclient_javawebstart.sh
Создаёт подписанные клиентские библиотеки client.jar и client_libs.jar в директории webroot/client/
webroot/client/bgclient.jnlp
Файл с настройками подключения и указанием файлов библиотек для скачивания клиентом
.bgclient_keystore
Стандартное хранилище ключей для подписи клиентских библиотек. Можно использовать собственное хранилище. Подробнее про работу с SSL-ключами - в документации к модулю mps: http://bgbilling.ru/v5.2/doc/ch21s03.html

Если у вас нет этих файлов - нужно взять из последней версии BGBillingServer

HOWTO

  1. Запускаем bgclient_javawebstart.sh на сервере (В стандартном update.sh )
  2. Редактируем webroot/client/bgclient.jnlp - прописываем настройки сервера и клиентской jvm
  3. Выполняем на клиентской машине в командной строке:
    javaws http://192.168.0.100:8080/bgbilling/client/bgclient.jnlp


Пример настройки bgclient.jnlp :

<?xml version="1.0" encoding="utf-8"?>
<jnlp
        spec="1.0+"
        codebase="http://192.168.0.100:8080/bgbilling/client"
        href="bgclient.jnlp" >
    <information>
        <title>BGBilling GUI client</title>
        <vendor>BiTel, Ltd.</vendor>
        <description>BGBilling GUI client</description>
    </information>
    <resources>
        <j2se version="1.6+" java-vm-args="-Xmx256m -Dlocal.setting.file.name=config_test"/>
        <jar href="client.jar" main="true"/>
        <jar href="client_libs.jar"/>
        <property name="db.server.0.title" value="BGBilling - test"/>
        <property name="db.server.0.url" value="http://192.168.0.100:8080/bgbilling/executer"/>
        <property name="db.server.0.proxy.host" value=""/>
        <property name="db.server.0.proxy.port" value=""/>
        <property name="look.and.feel.default" value="javax.swing.plaf.metal.MetalLookAndFeel"/>
        <property name="look.and.feel.default.theme" value="OceanTheme"/>
        <property name="user.country" value="RU"/>
        <property name="user.language" value="ru"/>
    </resources>
    <security><all-permissions/></security>
    <application-desc main-class="bitel.billing.ShellFrame" />
</jnlp>

Готово! Должно открыться обычное окно клиента биллинга.

Использование собственных клиентских библиотек

Допустим, у нас есть jar-библиотеки, которые мы хотим использовать на стороне клиента. Для этого их нужно:

  1. Прописать в bgclient.jnlp
  2. Подписать тем же ключом, что и стандартные и положить в webroot/client/

Если посмотреть в bgclient_javawebstart.sh, можно увидеть, что в конце там проверяется наличие пользовательского файла bgclient_javawebstart_user.sh и он по возможности выполняется

HOWTO

Пусть у нас есть файл my_client.jar

  1. Создаём директорию client_lib_user
  2. Кладём туда my_client.jar
  3. Пишем скрипт bgclient_javawebstart_user.sh (ниже)
  4. Запускаем bgclient_javawebstart.sh
  5. Прописываем my_client.jar в bgclient.jnlp
  6. PROFIT!

bgclient_javawebstart_user.sh :

#!/bin/sh

cd ${0%${0##*/}}.

. ./setenv.sh

KEYSTORE=".bgclient_keystore"
USER_LIBS=./client_lib_user/*.jar

checkJar_user()
{
    if [ -e $1 ]; then
        FNAME=`basename $1`
        #new file hash
        A=`sha1sum $1 | cut -c1-40`
        B=""
        #old file hash
        if [ -e "webroot/client/${FNAME}.sha" ]; then
                B=`cat webroot/client/${FNAME}.sha`
        fi
        if [ "$A" != "$B" ]; then
                echo "$(tput setaf 2)${FNAME}$(tput sgr0) has changed!"
                ${JAVA_HOME}/bin/jarsigner -keystore ${KEYSTORE} -storepass "${PASSWORD-123456}" -signedjar webroot/client/${FNAME} $1 bgbilling
                echo "${A}" >  webroot/client/${FNAME}.sha
        else
                echo "$(tput setaf 6)${FNAME}$(tput sgr0) hasn't changed"
        fi
    fi
}

for f in ${USER_LIBS}
do
        if [ -e $f ]; then
                checkJar_user $f
        fi
done

bgclient.jnlp:

<?xml version="1.0" encoding="utf-8"?>
<jnlp
        spec="1.0+"
        codebase="http://192.168.0.100:8080/bgbilling/client"
        href="bgclient.jnlp" >
    <information>
        <title>BGBilling GUI client</title>
        <vendor>BiTel, Ltd.</vendor>
        <description>BGBilling GUI client</description>
    </information>
    <resources>
        <j2se version="1.6+" java-vm-args="-Xmx256m -Dlocal.setting.file.name=config_test"/>
        <jar href="my_client.jar"/>
        <jar href="client.jar"/>
        <jar href="client_libs.jar"/>
        <property name="db.server.0.title" value="BGBilling - test"/>
        <property name="db.server.0.url" value="http://192.168.0.100:8080/bgbilling/executer"/>
        <property name="db.server.0.proxy.host" value=""/>
        <property name="db.server.0.proxy.port" value=""/>
        <property name="look.and.feel.default" value="javax.swing.plaf.metal.MetalLookAndFeel"/>
        <property name="look.and.feel.default.theme" value="OceanTheme"/>
        <property name="user.country" value="RU"/>
        <property name="user.language" value="ru"/>
    </resources>
    <security><all-permissions/></security>
    <application-desc main-class="bitel.billing.ShellFrame" />
</jnlp>

Примечания

  • Если в пользовательском классе переопределяются ресурсы или классы из client.jar или, простихоспаде, client_libs.jar, то в bgclient.jnlp пользовательский файл должен в списке стоять раньше соответствующей библиотеки, а также необходимо убрать атрибут 'main="true"' у client.jar.
Источник — «http://wiki.bitel.ru/index.php/Javaws»
Личные инструменты