3. Обновление технологического стека¶
3.1. Переход к использованию WildFly¶
WildFly - это новый формат Java EE-сервера приложений, ранее известного как JBoss AS. В Synergy 4.1 используется WildFly 14 с Java 8.
С подробным описанием WildFly 14 можно ознакомиться в официальной документации. Здесь приведем краткое описание изменений, которые непосредственно влияют на процесс работы с Synergy:
WildFly более строго следит за стартом подсистем. В частности, если hostname машины, где запускается WildFly, не опознан, то не запустится подсистема веб-сервисов, и загрузка приложений остановится. Чтобы это исправить, нужно прописать имя хоста в файле
/etc/hosts
, например, с помощью такой команды:# echo "127.0.0.1 $(hostname)" >> /etc/hosts
Вместо
127.0.0.1
можно указать внешний ip-адрес сервера.Конфигурационный файл
standalone-onesynergy.xml
содержит большие изменения, связанные с изменением названий и состава подсистем сервера приложений. Если в вашем старом конфигурационном файлеstandalone-onesynergy.xml
не имелось каких-либо собственных изменений (например, добавления очередей, источников данных и прочего), необходимо отвечатьДа
на запрос об изменении этого конфигурационного файла при обновлении.Подсказка
Если у вас имеются собственные изменения, необходимо сделать резервную копию
standalone-onesynergy.xml
, заменить ваш конфигурационный файл на тот, что поставляется с пакетом (то есть, опять же, ответитьДа
на вопрос об изменении файла) и, внимательно изучив различия старой и новой конфигураций (например, используяdiff
или его варианты), произвести необходимые изменения в новой версии конфигурационного файла.Состав пакетов
arta-synergy-*
значительно сокращен:arta-synergy-jboss
- пакет, содержащий сервер приложений WildFlyarta-synergy-asforms
- описание форм Synergyarta-synergy-deps-jackrabbit
- адаптер для хранилища Jackrabbit; как и прежде, может быть заменен наarta-synergy-jcrmigrator
илиarta-synergy-jcr4c
arta-synergy-esb
- объединенный пакет, содержащий шину событий Synergy и индексаторarta-synergy-synergy
- пакет с Synergy и всеми необходимыми библиотеками (которые ранее жили в пакетеarta-synergy-deps*
)arta-synergy-utils
- некоторые вспомогательные утилиты
3.1.1. Инструкция по исправлению ошибок, возникших после обновления¶
3.1.1.1. Восстановление работы внешних модулей¶
В зависимостях на библиотеки
compile(group: 'com.google.guava', name: 'guava', version: '14.0.1', transitive: false)
compile(group: 'org.slf4j', name: 'slf4j-api', version: '1.6.1', transitive: false)
compile ('org.jboss.spec:jboss-javaee-6.0:3.0.3.Final')
compile "org.codehaus.jackson:jackson-mapper-asl:1.9.13"
compile "org.codehaus.jackson:jackson-core-asl:1.9.13"
прописать новые версии:
compile(group: 'com.google.guava', name: 'guava', version: '18.0', transitive: false)
compile(group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25', transitive: false)
compile ('org.jboss.spec:jboss-javaee-7.0:1.1.1.Final')
compile "org.codehaus.jackson:jackson-mapper-asl:1.9.2"
compile "org.codehaus.jackson:jackson-core-asl:1.9.2"
Версии для
asf-common
иutil-common
прописать 4.1:compile(group: 'kz.arta', name: 'asf-common', version: '4.1')
compile(group: 'kz.arta', name: 'util-common', version: '4.1')
2. Чтобы приложение деплоилось после деплоя Synergy.ear, необходимо добавить файл jboss-all.xml
в WEB-INF с содержимым:
<jboss umlns="urn:jboss:1.0"> <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0"> <dependency name="Synergy.ear" /> </jboss-deployment-dependencies> </jboss>
При вызове методов API Synergy в PostConstruct методах в WildFly может возникнуть ошибка:
WFLYCTL0348: Timeout after [300] seconds waiting for service container stability. Operation will roll back. Step that first updated t he service container was 'add' at address '[ ("core-service" => "management"), ("management-interface" => "native-interface") ]'
Если ошибка будет воспроизводится на вашем стенде Synery, то в качестве обходного варианта решения предлагаем вынести обращения к методам API в таймер, который будет запускаться в PostConstruct методе с задержкой 2 минуты. Если вы найдете более элегантное решение, просим сообщить в команду Core Team.
Если вы используете resteasy его необходимо прописать через providedCompile:
providedCompile(group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.8.0.Final') providedCompile(group: 'org.jboss.resteasy', name: 'resteasy-multipart-provider', version: '3.8.0.Final')
3.1.1.2. Новый формат очередей¶
Wildfly интегрирован с Apache ActiveMQ Artemis, поэтому в случае наличия на стенде Synergy
кастомных очередей необходимо поменять их формат (в файле /opt/synergy/jboss/standalone/configuration/standalone-onesynergy.xml
).
Очереди теперь прописываются в разделе <subsystem xmlns="urn:jboss:domain:messaging-activemq:3.0">
в формате:
<jms-queue name="ItsmBlockingQueue" entries="queue/ItsmBlockingQueue java:jboss/queues/Integration/ItsmBlockingQueue" durable="true"/>
3.1.1.3. Изменения в скриптах интерпретатора¶
Скрипты, содержащие строки со splice
, на Java8 отрабатывают некорректно:
Array.prototype.splice.call(arguments, 0);
Необходимо заменить такую строку на следующую:
var args = Array.prototype.slice.call(arguments);
Предположим, что скрипт интерпретатора содержал такой код:
getValue: function(){
Array.prototype.splice.call(arguments, 0);
args.push(__SERVER);
return __CLIENT__.getValue.apply(null, args);
}
setValue: function(){
Array.prototype.splice.call(arguments, 0);
args.push(__SERVER);
return __CLIENT__.setValue.apply(null, args);
}
Исправленный вариант этого кода выглядит так:
getValue: function(){
var args = Array.prototype.slice.call(arguments);
args.push(__SERVER);
return __CLIENT__.getValue.apply(null, arguments);
}
setValue: function(){
var args = Array.prototype.slice.call(arguments);
args.push(__SERVER);
return __CLIENT__.setValue.apply(null, args);
}
3.2. Обновление Lucene¶
До версии Synergy 4.0 включительно в качестве индексатора форм, файлов и документов использовался Lucene версии 3.6.2.
В версии Synergy 4.1 используемая версия индексатора была обновлена до 7.3.1. При этом актуальная версия Lucene может не поддерживать некоторые индексы, созданные в предыдущих версиях, и это не является ошибкой Synergy.
3.2.1. Утилита для обновления индексов¶
Пакет arta-synergy-utils
содержит утилиту для апгрейда индексов Lucene до версии 7. Чтобы ее использовать, нужно:
остановить
jboss
:# /etc/init.d/arta-synergy-jboss stop
вызвать команду:
# /opt/synergy/utils/lucene/upgrade-to-lucene-7.sh
При необходимости можно передать пути к индексам в командной строке, например:
# /opt/synergy/utils/lucene/upgrade-to-lucene-7.sh /some/index/path /some/other/path
В этом случае файл /opt/synergy/jboss/standalone/configuration/arta/luceneConfiguration.xml
игнорируется.
В случае успешного апгрейда индексов вывод команды будет таким:
Reading paths from /opt/synergy/jboss/standalone/configuration/arta/luceneConfiguration.xml:
/var/lib/synergy/documentIndex /var/lib/synergy/formIndex /var/lib/synergy/index
========================
Upgrade /var/lib/synergy/documentIndex to:
Lucene version 4.10.4... done.
Lucene version 5.5.0... done.
Lucene version 6.3.0... done.
Lucene version 7.3.1... done.
========================
Upgrade /var/lib/synergy/formIndex to:
Lucene version 4.10.4... done.
Lucene version 5.5.0... done.
Lucene version 6.3.0... done.
Lucene version 7.3.1... done.
========================
Upgrade /var/lib/synergy/index to:
Lucene version 4.10.4...done.
Lucene version 5.5.0... done.
Lucene version 6.3.0... done.
Lucene version 7.3.1... done.
========================
Upgrade to Lucene 7 went OK!
После выполнения утилиты необходимо снова запустить Synergy и выполнить индексацию документов, форм и файлов.
Внимание
Процедуру полной переиндексации документов, форм и файлов необходимо выполнять независимо от того, какой индексатор используется в Synergy - и для Lucene, и для Elasticsearch.
3.2.2. Возможные ошибки¶
Возможна ситуация, когда утилита не сможет обновить индексы:
Reading paths from /opt/synergy/jboss/standalone/configuration/arta/luceneConfiguration.xml:
/var/lib/synergy/documentIndex /var/lib/synergy/formIndex /var/lib/synergy/index
========================
Upgrade /var/lib/synergy/documentIndex to:
Lucene version 4.10.4...Exception in thread "main" org.apache.lucene.index.IndexFormatTooNewException: Format version is not supported (resource: BufferedChecksumIndexInput(MMapIndexInput(path="/var/lib/synergy/documentIndex/segments_w"))): 8 (needs to be between 0 and 3)
at org.apache.lucene.codecs.CodecUtil.checkHeaderNoMagic(CodecUtil.java:156)
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:348)
at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:462)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:923)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:769)
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:458)
at org.apache.lucene.index.DirectoryReader.listCommits(DirectoryReader.java:277)
at org.apache.lucene.index.IndexUpgrader.upgrade(IndexUpgrader.java:150)
at org.apache.lucene.index.IndexUpgrader.main(IndexUpgrader.java:73)
В этом случае нужно:
остановить
jboss
удалить индексы из папки
/var/lib/synergy/
:# rm -r /var/lib/synergy/documentIndex /var/lib/synergy/formIndex /var/lib/synergy/fileIndex /var/lib/synergy/index
запустить
jboss
и выполнить индексирование файлов, форм и документов в Административном приложении
Внимание
Обратите внимание, что при этом также могут быть удалены и кастомные индексы, которые использовались для построения диаграмм, и при индексировании данных эти индексы не будут созданы автоматически. Бизнес-приложениям необходимо самостоятельно пересоздать используемые кастомные индексы.
3.3. Обновление Cassandra¶
В Synergy 4.1 была обновлен используемый пакет для хранилища Cassandra до версии 2.2. Со всеми нововведениями в этой версии вы можете ознакомиться по ссылке.
Одним из преимуществ новой версии Cassandra является возможность компрессии данных, которая не только обеспечивает экономию дискового пространства, но и увеличивает скорость чтения с диска на 25-35% (согласно официальному заявлению Datastax).
Метод компрессии | Процент сжатия |
---|---|
LZ4 | 12,54 |
Snappy | 12,48 |
Deflate | 33,84 |
3.3.1. Как включить компрессию¶
При использовании хранилища Cassandra с платформой Arta Synergy следует включать компрессию на таблицах jcr.properties
и jcr_ss4c.ss4c
,
например, при выборе алгоритма сжатия DeflateCompressor
команды будут выглядеть следующим образом:
cqlsh> ALTER TABLE jcr.properties WITH compression = {'sstable_compression': 'DeflateCompressor'};cqlsh> ALTER TABLE jcr_ss4c.ss4c WITH compression = {'sstable_compression': 'DeflateCompressor'};
Для отключения компрессии нужно использовать подобную команду:
cqlsh> ALTER TABLE jcr.properties WITH compression = {'sstable_compression': ''};
Способы включить/ отключить компрессию на таблицах БД показаны в соответствующей статье Datastax.
3.4. Обновление JasperReports¶
В новой версии Synergy была добавлена поддержка работы с системой для построения пользовательских отчетов TIBCO Jaspersoft Studio (на момент релиза актуальной является версии 6.6.0). Среди прочих изменений, внедренных TIBCO в этой версии, в применении к Synergy интересна возможность построения отчетов на основе данных JSON и XML.
Инструкция по работе с новой версией JasperReports приведена в Руководстве разработчика.