Javaws
Материал из BiTel WiKi
Содержание |
Описание
Технология Java Web Start позволяет загружать и запускать приложения Java по сети. В случае с биллингом это выглядит следующим образом:
- Клиент вводит URL в браузере или запускает .bat(.sh)-файл
- Запускается java, с локального сервера биллинга скачиваются актуальные клиентские библиотеки и настройки подключения и JVM
- Запускается привычный 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
- Запускаем bgclient_javawebstart.sh на сервере (В стандартном update.sh )
- Редактируем webroot/client/bgclient.jnlp - прописываем настройки сервера и клиентской jvm
- Выполняем на клиентской машине в командной строке:
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-библиотеки, которые мы хотим использовать на стороне клиента. Для этого их нужно:
- Прописать в 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 :
#!/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.