Project

General

Profile

Замечания к эксплуатации, подсказки

Общее

Автостарт

Заставить систему запускаться в момент загрузки сервера можно разными способами. Для Unix это, например, добавить строчку в файл /etc/rc.local

su - gf -c "asadmin start-domain domain1" 

Это, если мы запускаем GF от имени пользователя gf. Мы были бы благодарны, если бы кто-то написал скрипты и инструкцию по правильному запуску/останову. Чтоб работало:

  • конфигурирование через rcconf
  • запуск/останов/статус через service

tcp

Внимание!!! Если запущен tcp6, то GF (точнее, java) может отказаться с ним работать. Варианты борьбы - на выбор:

MySQL

Рестарт

Перезагрузили MySQL - необходимо перезагрузить и GlassFish. Причина — мы пока не используем AutoReconnect в драйвере JDBC. Если кому-то удастся нас убедить, что эта опция абсолютно безопастна (транзакционность, сессионность), то включим в стандарт. А пока так. Симптомы — сообщения сервера GlassFish — no operations allowed after connection closed.connection was implicitly closed by the driver

Резервные копии

Как сделать резервные копии базы? На текущий момент в системе используется две базы: одна для текстов документов, а вторая для всего остального. Как они называются? Если при инсталляции был задан префикс, допустим docero, то названия будут такие: docero и docero_<часть_года><месяц-1><день>. Например: docero и docero_0110907.

Точное название можно получить и так - select replica from <имя_данное_при_инсталляции>.storages;

Вот пример скрипта, который можно пускать в кроне.

#!/bin/bash
#
# Основную базу зовут docero
#
cTime=`date '+%Y%m%d-%H%M%S'`
dna='пользователь_mysql_который_может_видеть все_таблицы'
dnaPass='пароль_пользователя_который_может_видеть все_таблицы'
rDir='Каталог_дампов'

mysqldump -F --opt -B docero_0110907 -h localhost -u ${dna} --pass=${dnaPass} \
        |gzip -9c >${rDir}/dph/docero_content.${cTime}.sql.gz
mysqldump -F --opt -B docero -h localhost -u ${dna} --pass=${dnaPass} \
        |gzip -9c >${rDir}/dph/docero.${cTime}.sql.gz

Восстановление с резервной копии

Удаляем базы, закачиваем с резервных копий. Больше ничего делать не надо :)
Как-то, примерно так (разархивирование и выбор каталога не описываем):

mysql -p
mysql>drop database doc;
mysql>drop database doc_0110907;
mysql>source doc.sql;
mysql>source doc_0110907.sql;

Посмотрите, также, подборку скриптов, может что пригодится.

Java

Проверяем отмену летнего времени.

Свершилось! Зимнее время отменено. А правильно ли все отображается в Доцеро? Проверяем...

А что из «джав» у нас запускается?

Уже не первый раз сталкиваемся с тем, что GF может работать совсем не в той java-машине, что нам хотелось бы — вместо, скажем, 1.6.30 работает 1.6.24 или, вообще OpenJDK — короче, не то.

Сначала посмотрим, а что система думает про нашу java-машину?

# java -version
java version "1.6.0_31" 
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

Теперь глянем, на запущенные процессы. И посмотрим, а какую версию использует GF?

# ps aux |fgrep java
gf        2169  0.1  3.2 3019056 1078124 ?     Sl   Jun12  13:30 /usr/lib/jvm/jdk/bin/java -Dcom.sun.aas.instanceRoot= (текст порезан)
# /usr/lib/jvm/jre/bin/java -version
java version "1.6.0_31" 
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

В нашем случае — все нормально. А что делать, если нет? Смотрим:

glassfish/config/asenv.conf переменную AS_JAVA. Она должна указывать на JDK! В зависимости от типа java-машины:

  • "/usr/lib/jvm/jdk"
  • "/usr/java/default/jre/.." - вот почему-то именно так, с двумя точками.

Переменные окружения:

  • JAVA_HOME=/usr/lib/jvm/jdk - тоже должна указывать на JDK.
  • APPSRV_HOME=/opt/gf/glassfish - корень GF

GlassFish

В конфигурации листенеров GlassFish 2.1X теоритически можно выбрать Network Address, который будет слушаться. НО! Если имеется 2 и более IP на одном физическом интерфейсе и уже есть програмка, которая слушает на одном из IP интересующий нас порт, то, если выставить у листенера незадействованный IP, Glassfish отказывается запускаться. Совсем. Приходится править domain.xml ручками или восстанавливать с резервной копии. Отсюда вывод - делаем копии удачных конфигураций. В общем, разумными значениями для Network Address являются 0.0.0.0 или 127.0.0.1 (для reverse-proxy, например).

GF любитель перезапуска при изменении конфигурации, загрузки модулей... Консоль администратора может и не сказать об этом, а перезапустить надо. Общее правило — поправил настройки — перезапусти "рыбку" (GF в смысле).

Пе непонятной, пока, причине возможно выключение "галочки" Status, Enabled в ресурсах jdbc. Симптом: при вводе логина/пароля страница просто перезагружается без каких-то дополнительных сообщений типа "неправильный пароль". Не работает и все тут. Надо проверить в "Resources> JDBC> JDBC Resources", что нужный jdbc ресурс включен.

Установка обновлений

Все очень просто

  1. Скачиваем файл последнего релиза системы и через административную страницу сервера Glassfish выбирем redeploy для приложения docero.pack, указываем скачанный файл,
  2. перезагружаем сервер Glassfish.

И всё! А теперь внимание — важные моменты:
Обновлённое приложение может попытаться расширить/изменить дизайн баз данных в MySQL и если произойдёт ошибка, которую процедура обновлений не сможет обслужить, то восстановление базы может быть проблематично. Поэтому:

  • перед установкой обновления, делаем резервные копии ДВУХ БД

если после перезагрузки сервера процедура обновления дала сбой:

  • в серверном логе появилось сообщение об ошибке в процедуре checkVersion,
  • в сервереном логе так и не появилась надпись "finish database `имя базы` upgrade"

то, решение:

  1. redeploy предыдущей версии приложения
  2. восстановить БД из резервной копии

С версии 1.2.3 обновлением дизайна базы занимается Lifecycle-модуль, в период пока база не приведена к последнему дизайну для пользователей отображается страничка "На реконструкции".

Доцеро

Конфигурационный файл

Файл с основными параметрами находится {Корень_GF}/domains/{имя_домена}/config/docero.xml , где {имя_домена} — по умолчанию domain1
Значения параметров:

Файл docero.xml имеет следующие обязательные параметры:

  • docero.jdbc.source — имя JDBC-ресурса сервера для подключения к БД
  • docero.jdbc.login — имя пользователя от которого работает приложение
  • docero.jdbc.password — пароль пользователя от которого работает система

Следующие параметры обязательны в текущей версии 1.2.6 но будут отменены в будущих версиях:

  • org.docero.logo.img — путь до логотипа изображаемого в заголовке портала
  • org.docero.logo.js — код javascript выполняемый при щелчке по логотипу
  • useStClient — просто аттавизм

Следующие параметры обязательны при использовании Oracle Access Manager (AM):

  • com.iplanet.am.naming.url
  • com.iplanet.am.cookie.name — см. документацию по Oracle Access Manager

Следующие параметры могут быть назначены при использовании Oracle Access Manager (AM):

  • com.sun.identity.agents.notification.enabled
  • com.iplanet.services.debug.level
  • com.iplanet.services.debug.directory
  • com.iplanet.am.cookie.encode — см. документацию по Oracle Access Manager

Следующие параметры являются не обязательными:

  • uploadDirectory — для изменения пути к каталогу для загрузки файлов вместо /upload
  • maxPostSize — максимальный размер запроса POST, фактически максимальный размер файла который можно загрузить по HTTP
  • docero.fop-xconf — для указания конфигурационного файла FOP-процессора (Apache FOP) используемого вместо входящего в дистрибутив
  • docero.word2fo-xsl — для указания файла XSLT преобразования MS Word Doc (до 2007) в FO-XSL отличного от входящего в дистрибутив
  • docero.fo2html-xsl — для указания файла XSLT преобразования FO-XSL в HTML отличного от входящего в дистрибутив

Длина имени схемы данных

Поскольку документы одного экземпляра «Доцеро» могут храниться в разных базах данных, то в документах приходится хранить, где конкретно расположен документ. А это накладывает некоторые ограничения.

Длина имени основной схемы. Это то имя, которое вводится при начальной установке в поле «настройки имени схемы». Для версий до 1.2.10.b1 включительно — 8 символов. По этому имени система автоматически создает хранилище документов, добавляя год, месяц и день создания. В базе под это поле отведено 17 символов. Объясним на примере:

Допустим, мы ошиблись и, при установке, набрали в качестве имени схемы docero1234 (один лишний символ). Имя хранилища должно быть таким — docero1234_0120509. А в базу запишется docero1234_012050. Смотрите:

mysql> select db from mysql.db where db like '%docero%';
+--------------------+
| db                 |
+--------------------+
| docero1234         |
| docero1234_0120509 |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from docero1234.storages;
+-------------------+---------------------+--------+----------+----------+------+----------+
| Replica           | Opened              | Closed | jndiName | Database | User | Password |
+-------------------+---------------------+--------+----------+----------+------+----------+
| docero1234_012050 | 2012-06-09 08:12:28 |   NULL | NULL     | NULL     | NULL | NULL     |
+-------------------+---------------------+--------+----------+----------+------+----------+
1 row in set (0.00 sec)

База называется docero1234_0120509, а система считает, что docero1234_012050. Как это проявится? При попытке сохранить любой документ, даже черновик, система рухнет с сообщение, типа "нет таблицы MySQL". Все пропало? Нет, исправить это не сложно.

Сначала поменяем имя базы:
  • Делаем дамп
  • меняет название текстовым редактором docero1234_0120509 —> docero1234_012050 в ДВУХ местах — CREATE и USE.
  • загружаем дамп.

Ну, вы же умеете это делать? :) Старую базу удаляем.

Ну, всё, будет работать? Нет, надо сделать еще одну вещь — дать права нашему пользователю на эту новую базу. В примере используется localhost, замените, если Вам требуется соединяться по сети.

mysql> GRANT ALL ON `docero1234_012050`.* TO docero1234@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,db,user from mysql.db where db like '%docero%';
+-----------+--------------------+------------+
| host      | db                 | user       |
+-----------+--------------------+------------+
| localhost | docero1234         | docero1234 |
| localhost | docero1234_012050  | docero1234 |
| localhost | docero1234_0120509 | docero1234 |
+-----------+--------------------+------------+
3 rows in set (0.00 sec)

Ну, по желание, можно сделать revoke для последней строки. Вот теперь, все. Должно работать.