Хранение данных отдельных решений (userdata)

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Хранение данных отдельных решений

Задание папок для хранения отдельных решений (userdata)

Данные отдельных решений на основе платформы Showcase хранятся в отдельных папках решений (userdata). На любом web-сервере таких папок может быть произвольное количество. Все эти папки собраны в общей корневой директории, обычно называемой userdatas. Эта директория обычно размещается в директории WEB-сервера Tomcat. Эту корневую директорию можно задать одним из 3 способов:

  1. В файле %tomcat%\conf\Catalina\localhost\%webappname%.xml, где %tomcat% – имя директории Tomcat, %webappname% – имя приложения Tomcat (Showcase или Showcase-ext).
  2. В файле %tomcat%\conf\context.xml.
  3. В файле webapps\%webappname%\WEB-INF\classes\general.properties – только в тестовых целях!

В 1-м и 2-м случаях формат записи следующий:

<Parameter name="showcase.rootpath.userdata"
           value="D:\\workspace\\Showcase\\userdatas" 
           override="false"/>


Папка userdata предназначена для хранения данных решений. Например, это могут быть Jython и JavaScript скрипты, HTML ресурсов, XSL трансформации, файлы настроек... Т.е. все те файлы, которые остаются неизменными при обновлении Showcase (путем замены war файла).

Задание

Задание userdata (начиная с версии 1.9.3):

Файлы, относящиеся к конкретному решению, хранятся в отдельной папке - userdata. На любом web-сервере таких папок (решений) может быть произвольное количество. При этом, задается корневая директория, а уже в ней находятся директории с конкретными userdata. Корневую директорию можно задать одним из 3 способов:

  1. в файле conf\Catalina\localhost\%webappname%.xml, где %webappname% - имя приложения Tomcat
  2. в файле conf\context.xml в директории Tomcat
  3. в файле webapps\%webappname%\WEB-INF\classes\general.properties - только в тестовых целях!

В 1-м и 2-м случаях формат записи следующий:

<Parameter name="showcase.rootpath.userdata"
           value="D:\\workspace\\Showcase\\userdatas" 
           override="false"/>

Структура корневой директории userdata

Папка с именем default является папкой userdata по умолчанию. При запуске Showcase по URL-адресу http://localhost:8080/Showcase используется именно она.

Папки остальных решений могут иметь произвольные имена. Для запуска конкретного решения нужно использовать URL вида http://localhost:8080/Showcase/?userdata=xxx, где xxx – имя папки этого решения.

Папки с именами, начинающимися на common. (например, common.sys, common.obfi), содержат общие для всех userdata ресурсы. Эти ресурсы при старте Showcase всегда копируются в каталоги всех решений веб-приложения, в отличие от настраиваемого копирования внутри отдельных userdata, о котором рассказано ниже. Вообще говоря, папки с именами, начинающимися на common., не обязательны. Однако UI-плагины и библиотеки могут находиться только в подпапках общих ресурсов (с именами на common.)!

Папки common. содержат следующие подпапки:

  • libraries – сторонние JavaScripts и CSS библиотеки (фреймворки);
  • plugins – UI плагины;
  • resources – картинки (графические ресурсы).

На данный момент папки common. (наследницы папки general) не содержат общего файла настроек generalapp.properties, который должен обязательно присутствовать. Этот файл вынесен в корень папки userdatas. Он содержит общие для всех решений настройки, например, адрес mellophone и параметры веб-консоли. Структура этого файла описана ниже в таблице. В более ранних версиях Showcase этот файл назывался app.properties и лежал в корневой директории userdata.

Если в папке с именем на common. есть папка js, а в ней соответственно содержится папка clientextlib, то всё содержимое последней папки (внешние клиентские библиотеки) будет скопировано в папку js приложения на Tomcat при запуске сервера.

В корневой папке userdata также хранятся следующие файлы общих настроек:

  1. Общий файл настроек логгера (logback.xml). Необязательный файл. В случае отсутствия используется одноименный файл, расположенный в папке webapps\%webappname%\WEB-INF\classes\. Если в корневой директории userdata имеется файл logback.xml, то он перекрывает файл, расположенный в папке webapps\%webappname%\WEB-INF\classes\.
  2. Файлы ключей API для элемента «карта»: geomap.key.hostname.properties, где hostname – имя хоста, на котором развернут сервер. Файлов ключей может быть несколько – для разных серверов, на которых развернуты данные userdata. Это необязательные файлы.

Структура общего generalapp.properties

Параметр Назначение Обязательный Пример значения Значение по умолчанию
security.mellophoneurl Внешний адрес для Mellophone — адрес, который должен быть доступен из пользовательского браузера. Да http://share.curs.ru:8180/mellophone -
local.security.mellophonerurl Внутренний адрес для Mellophone — адрес, который должен быть доступен с сервера приложения. Используется в случае, если Mellophone расположен в той же подсети, что и сервер приложений (в частности — на localhost), и если доступ к внешним адресам с сервера приложений закрыт. Да http://localhost:8180/mellophone -
security.crossdomain.authentication Включает или отключает кроссдоменную аутентификацию Нет true или false false
security.ssl.keystore.path Содержит полный путь к доверенному хранилищу сертификатов Нет C:\\.keystore -
web.console.size Максимальное число записей в веб-консоли, отображаемых и хранимых в памяти. Нет 100 50
web.console.add.text.files Веб-консоль отображает содержимое только текстовых файлов. "Текстовость" файла определяется по расширению. Ряд расширений зашит в Showcase, здесь же вы можете добавить свои. Нет pl:php txt:xml:xsd:xsl:sql:ini:

properties:htm:html:java:cmd:py:svg

id.casesensitive Определяет как будут сравниваться идентификаторы (инф. панелей, вкладок, элементов панели и навигатора...) в Showcase Нет true или false false
jmx.enable Отключает поддержку JMX Нет true или false false
login.title Заголовок окна логина Нет Окно логина Зашито внутри login.jsp
enable.client.log Клиентская часть будет записывать в лог и веб-консоль действия пользователя Нет true false
enable.log.level.info

enable.log.level.warning enable.log.level.error

Настроить логирование сообщений трех уровней: INFO, WARNING и ERROR Нет true или false true
activiti.enable Задаёт, запускать ли движок Activiti при старте сервера приложений Да true или false false
иные настройки Activiti с префиксом activiti... Описание см. в статье Activiti
celesta.score.path score path Celesta Нет c:/eDacha/score/ -
иные настройки Сelesta с префиксом celesta... Описание см. в статье Базовая настройка Celesta
rdbms.connection.url URL подключения к JDBC-драйверу (Используется также в Celesta) Да
  • jdbc:sqlserver://172.16.1.114:52836;databaseName=celesta;user=sa;password=111
  • jdbc:postgresql://127.0.0.1:5432/celesta?user=postgres&password=7464
  • jdbc:oracle:thin:celesta/123@192.168.110.128:1521:XE
-
rdbms.connection.username Логин для подключения к базе данных (Используется также в Celesta) Да -
rdbms.connection.password Пароль для подключения к базе данных (Используется также в Celesta) Да -
showcase.authentication.anonymous Устанавливает возможность анонимного входа в Showcase. Нет true false
grids.preload Устанавливает предзагрузку js-скриптов гридов при открытии окна Showcase. Нет true false
grids.preload Устанавливает предзагрузку js-скриптов гридов при открытии окна Showcase. Нет true false
rest.entry.proc Устанавливает celesta- или jython-процедуру обработки Rest-запросов. Нет webservices.restModule.entryProc.cl -
rest.authentication.type Устанавливает тип аутентификации пользователя для celesta-скриптов, прописанных в свойстве rest.entry.proc для Rest вэбсервисов. Принимает 2 значения: simple (аутентифиция от имени пользователя userCelestaSid) и celesta (аутентифиция от имени пользователя, залогиненного в текущей http-сессии для скриптов celesta) Нет celesta simple
mellophone.show.reason.for.blocked.user Определяет, выводить ли информативное сообщение в браузере о том, что пользователь был заблокирован меллофоном при многократном неправильном вводе логина и пароля, либо оставить прежнее сообщение об ошибке. Нет true false
zero.configuration.check.mellophone Отвечает за то, будет ли осуществляться проверка доступности меллофона в zero configuration. true - будет осуществляться, false - не будет. Нет false true
delete.solutions.dir.on.tomcat.startup Отвечает за то, будет ли удаляться папка solutions при старте томката. true - будет, false - не будет. Нет false true
copy.common.files.on.startup См. Замечание 6. Нет false true
file.upload.proc Имя celesta-процедуры для закачки файла на сервер в jsForms. Нет file_upload_celesta_proc.cl -
zero.configuration.database.connections.amount Количество проверок подключения к базе данных в zero configuration. Нет 3 1
zero.configuration.database.connections.interval Интевал времени в мс, через который будут осуществляться повторные проверки подключения к базе данных в zero configuration. Нет 500 0
zero.configuration.mellophone.connections.amount Количество проверок подключения к меллофону в zero configuration. Нет 5 1
zero.configuration.mellophone.connections.interval Интевал времени в мс, через который будут осуществляться повторные проверки подключения к меллофону в zero configuration. Нет 300 0

Замечание 1: Начиная с версии Showcase 3.0.1.3576, внесены некоторые изменения, касающиеся свойств подключения к базе данных. Так, для свойств rdbms.connection.url, rdbms.connection.username и rdbms.connection.password действуют следующие правила. Теперь если некоторые из этих свойств не указаны в файле app.properties конкретной userdat-ы, то соответствующие свойства будут браться из файла generalapp.properties, описанного выше. Таким образом, если все userdat-ы подключаются к одной и той же базе данных, то нет необходимости прописывать эти свойства в каждой userdata. Достаточно их прописать в файле generalapp.properties. Все предыдущие решения будут работать по умолчанию без изменений.

Замечание 2: Свойства enable.log.level.info, enable.log.level.warning и enable.log.level.error введены для сокращения нагрузки на сервер приложения, когда приложение активно используется под большой нагрузкой. Это поможет сократить время выполнения запроса к серверу до 1 секунды на запрос (запись сообщений логов и их обработка может занимать время), а также поможет избежать разрастания файла логов до больших значений. Данные свойства могут быть полезны в production mode. Для описанного характера поведения приложения для данных свойств необходимо установить значение false.

Замечание 3: Если свойство copy.userdatas указано, но пусто, или же если это свойство не указано совсем, то в папку solutions на Tomcat будут копироваться файлы и папки для всех юзердат, включая default и папки, названия которых начинаются на common.

Замечание 4: Начиная с версии Showcase 3.9.0.3910 появилась возможность доступа к содержимому файла generalapp.properties из питоновских скриптов. Для этого в java-код была добавлена специальная карта (словарь) типа Map<String, String>, содержащая все свойства из указанного файла. Обратиться к этой карте можно следующим образом:

AppInfoSingleton.getAppInfo().getGeneralAppProperties().getMap();

А получить значение конкретного свойства можно так:

AppInfoSingleton.getAppInfo().getGeneralAppProperties().getProperty(key);

Здесь key - строка, содержащая имя свойства (ключ). Если такого ключа нет в карте (а соответственно и в файле generalapp.properties), то указанный вызов возвратит null.

Замечание 5: Все свойства из файла generalapp.properties, начинающиеся с префикса celesta., теперь доступны в celesta-скриптах через вызов метода

Celesta.getInstance().setupProperties.getProperty('property_name'),

причём в имя свойства property_name должна входить лишь часть после префикса celesta.

Замечание 6: Cвойства copy.perspective.files.on.startup (в app.properties) и copy.common.files.on.startup (в generalapp.properties), по умолчанию равные "true", отвечают за копирование на томкат статического контента из перспектив и папок common. соответственно. В случае "false" копирования не происходит. Настройка copy.common.files.on.startup теперь учитывает директории plugins и libraries. Кнопка перегрузить юзердату в control/memory.jsp не учитывает настройки copy.*.files.on.startup, а также дополнительно перегружает (копирует) директории plugins и libraries.

Структура отдельной папки userdata

Базовая структура папки userdata следующая:

  • css - стили решения;
  • data - данные для элементов информационной панели, содержит подкаталоги webtext и xforms;
  • datapanelstorage - файлы информационных панелей;
  • gridproperties - профайлы грида;
  • html - файлы header, footer и welcome-фреймов;
  • js - js-скрипты решения;
  • navigatorstorage - файлы навигатора;
  • plugins - UI плагины
  • resources - картинки (графические ресурсы)
  • schemas - пользовательские схемы для проверки данных при закачке через XForms;
  • score - гранулы Celesta, папка автоматически добавляется к score path;
  • scripts - серверные скрипты;
  • xforms - шаблоны XForms;
  • xslttransforms - файлы трансформации xsl;
  • xslttransformsforgrid - файлы трансформации xsl для экспорта в Excel в гриде;
  • app.properties - настройки решения;
  • user.messages.xml - сообщения для пользователя при проверке данных на уровне БД (см. ниже).

Папки css, resources, js, libraries и plugins, расположенные в папках с именами на common. корневой папки userdata, могут содержать подкаталоги произвольной глубины вложенности. Кроме того, данные папки содержат ресурсы, на которые ссылается главная страница приложения и поэтому эти папки должны быть скопированы на сервер Tomcat. Теперь это происходит автоматически, т.е. при каждом запуске сервера Tomcat указанные каталоги будут копироваться в каталог Tomcat. Также автоматически будет происходить копирование папок css, resources, js из каждой юзердаты. Папки css, resources, js копируются в каталог

webapps\%webappname%\solutions\xxx,

где xxx - имя папки userdata,

а папки libraries и plugins, начиная с версии Showcase 3.0.1.3572, копируются в каталог

webapps\%webappname%\solutions\general,

в то время как в прежних версиях Showcase они копировались в тот же каталог, куда и папки css, resources и js.

Если эти пути к каталогам отсутствуют, то они будут созданы. В случае наличия целевых файлов они будут перезаписаны. Структура каталогов при копировании сохраняется.

Для того чтобы упростить задание путей к уже скопированным в папку Tomcat ресурсам, была введена HTML-переменная ${userdata.dir} (см. ниже).

Также на данный момент происходит автоматическое копирование файла user.properties из папки WEB-INF, лежащей в папках с именами на common., в папку WEB-INF на Tomcat. Более того, если в файле user.properties был добавлен новый пользователь, то это автоматически отразится в файле user.properties на Tomcat при его запуске, и если Вы захотите залогиниться под новым пользователем в Showcase, Вам не придётся ещё раз перезагружать Tomcat, изменения вступают в силу при первом его запуске, т.е. Tomcat сразу же подцепит этот файл при запуске. Копирования папок lib, libJython и всего их содержимого, как раньше, не происходит! Jar-файлы и py-библиотеки автоматически подцепляются к решению!

Ещё одно нововведение, касающееся версии Showcase 3.0.1.3572, звучит следующим образом: теперь те файлы (папки), которые не копируются в solution в webapps на Tomcat и которые присутствуют в папках с именами на common. (это могут быть такие папки, как navigatorstorage, datapanelstorage, html, schemas, xforms, scripts, data, gridproperties, geomapproperties, xslttransforms, xslttransformsforgrid, а также файл user.messages.xml) становятся доступными для "всех userdata". В случае если эти файлы дублируются в папке конкретного решения, то приоритет имеют именно файлы из конкретного решения, а не из папок с именами на common. Таким образом, работает следующее правило приоритета: вначале наличие файлов проверяется в конкретной папке решения, а потом в соответствующей папках common., отличных от common.sys, последней проверяется папка common.sys. В случае совпадения имен файлов приоритет отдается файлу из конкретной userdat-ы. При обновлении war всё будет работать как и ранее, но теперь при разработке новых решений можно размещать файлы метаданных не только в папке конкретного решения, но и в папках common.

Начиная с версии Showcase 3.9.0.3913, содержимое папки resources\login_content из юзердаты (если эта папка там присутствует) при запуске Tomcat копируется не в папку Showcase\solutions\userdata_name\resources\login_content (где userdata_name - имя конкретной юзердаты), а непосредственно в Showcase\resources\login_content.

Автоматическое выполнение JS-кода при загрузке Showcase

Для того чтобы некий JS код выполнился при загрузке главной страницы Showcase, необходимо просто поместить этот код в файл solution.js, находящийся в папке js соответствующей userdata. Это может быть вызов некоторой функции, объявленной в этом же файле, или просто JS-код. Так как файл solution.js можно задавать для каждой userdata, то автовыполняемый код также может отличаться в зависимости от userdata.

Подгрузка статических библиотек в клиентский код Showcase

В Showcase реализована возможность статической подгрузки библиотек в клиентский код (статическая подгрузка js и файлов css). Статическая подгрузка подразумевает собой, что:

  • JS файлы подгружаются на главную страницу index.jsp как:
    <script src="file_path"></script>
  • а css-файлы:
    <link rel="stylesheet" href="file_path"/>

Для реализации статической подгрузки необходимо сделать следующее. В файле app.properties конкретной юзердаты нужно задать свойства:

    import.static.external.js.libraries
    import.static.external.css

В данных свойствах через запятую запятую перечислить пути к файлам, которые необходимо добавить на клиента. Формат задания пути:

/имя_папки_где_лежит_библиотека/имя_файла  

Корневым каталогом для свойства import.static.external.js.libraries по автомату считается каталог js приложения Showcase (от этой папки и идет отсчет, папка 'имя_папки_где_лежит_библиотека' должна лежать в папке js приложения), а для свойства import.static.external.css - каталог css.

В связи с этим для путей, прописанных в этих свойствах и касающихся юзердаты, следует скорректирровать значения этих путей, например, так:

    import.static.external.js.libraries = /../solutions/default/js/file1.js,...
    import.static.external.css = /../solutions/default/css/file2.css,... 

Вместо юзердаты default вы можете указать имя своей юзердаты.

Здесь есть несколько моментов, на которые нужно обратить внимание при использовании этой возможности:

  • Возможны конфликты css вашей библиотеки со стилями, которые используются в платформе. За этим надо следить разработчику решения.
  • Не подгружать библиотеки большого размера, стараться их урезать (использовать только то, что надо). Иначе загрузка большого объема данных существенно и критически ограничивает производительность системы при работе многих пользователей одновременно.
  • Если вы используете библиотеки, где в файлах есть импорт из других файлов, то необходимо чтобы эти ссылки были относительными.

Интернационализация

Для установки языка информационных сообщений в файле app.properties конкретной юзердаты нужно задать свойство:

     internatiolization.language

Оно может принимать 2 значения: ru (русский) либо en (английский). По умолчанию, если это свойство не прописано, используется русский язык сообщений.

Страницы обработки ошибок 404 и 500

В папке пользовательских данных возможно создавать кастомизированные страницы с сообщениями об ошибках на сервере приложений с кодами возврата 404 и 500. Для этого специально подготовленные для решения файлы с именами err404.jsp и err500.jsp необходимо положить в корневую директорию папки пользовательских данных. Данные файлы будут скопированы в папку приложения автоматически при запуске сервера приложений. Если в корневой директории папки пользовательских данных файлов нет, то будут использоваться страницы с сообщением об ошибках по умолчанию.

Файл security.xml

Для доступа к файлам на сервере (например, fileRepository) из браузера без прохождения процедуры аутентификации требуется изменение содержимого файла security.xml. С этой целью, при запуске Showcase отредактированный разработчиком решения файл security.xml (в случае его наличия) копируетсяся из корня папки пользовательских данных в директорию WEB-INF war-файла на сервере Tomcat.

Открытие pdf-файлов в новой вкладке браузера

По умолчанию, файлы pdf, скачивание которых может быть предусмотрено с помощью грида или xform, не открываются внутри вкладке браузера, а скачиваются обычным способом. Для открытия файлов pdf в новой вкладке браузера встроенным в браузер просмотрщиком pdf-файлов нужно в файле app.properties выставить следующую настройку:

 has.download.attribute.for.blank.tab = true