Javaws
Материал из BiTel WiKi
(Новая страница: «= Описание = Технология Java Web Start позволяет загружать и запускать приложения Java по сети. В сл…») |
|||
Строка 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 : | ||
+ | <source lang="bash"> | ||
+ | #!/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 | ||
+ | </source> | ||
+ | |||
+ | 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:31, 9 апреля 2013
Содержание |
Описание
Технология 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.