Javaws

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «= Описание = Технология Java Web Start позволяет загружать и запускать приложения Java по сети. В сл…»)
(Примечания)
 
(2 промежуточные версии не показаны)
Строка 57: Строка 57:
Готово!
Готово!
Должно открыться обычное окно клиента биллинга.
Должно открыться обычное окно клиента биллинга.
 +
 +
= Использование собственных клиентских библиотек =
 +
Допустим, у нас есть jar-библиотеки, которые мы хотим использовать на стороне клиента.
 +
Для этого их нужно:
 +
# Прописать в bgclient.jnlp
 +
# Подписать тем же ключом, что и стандартные и положить в webroot/client/
 +
 +
Если посмотреть в bgclient_javawebstart.sh, можно увидеть, что в конце там проверяется наличие пользовательского файла bgclient_javawebstart_user.sh и он по возможности выполняется
 +
 +
=== HOWTO ===
 +
Пусть у нас есть файл my_client.jar
 +
# Создаём директорию client_lib_user
 +
# Кладём туда my_client.jar
 +
# Пишем скрипт bgclient_javawebstart_user.sh (ниже)
 +
# Запускаем bgclient_javawebstart.sh
 +
# Прописываем my_client.jar в bgclient.jnlp
 +
# PROFIT!
 +
 +
bgclient_javawebstart_user.sh :
 +
<pre>
 +
#!/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
 +
</pre>
 +
 +
bgclient.jnlp:
 +
<source lang="xml">
 +
<?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>
 +
</source>
 +
 +
=== Примечания ===
 +
* Если в пользовательском классе переопределяются ресурсы или классы из client.jar или, ''простихоспаде'', client_libs.jar, то в bgclient.jnlp пользовательский файл должен в списке стоять раньше соответствующей библиотеки, а также необходимо убрать атрибут 'main="true"' у client.jar.

Текущая версия на 05:34, 9 апреля 2013

Содержание

Описание

Технология 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»
Личные инструменты