Регулярные выражения позволяют гибко описывать шаблоны строк.
Описание строк осуществляется путём подстановки определённых макросов, обозначающих части строки либо символы определённого типа.
Например:
(342) - это символы 342 следующие один за другим; |
3\d2 - это 3 затем любая цифра и 2; |
((342)|(559)) - последовательность симоволов 342 либо 559; |
44[2-8] - строки 442, 443, 444, 445, 446, 447, 448. |
Расшифровка некоторых макросов:
а-b - на этом месте может располагаться симовол от a до b (в таблице символов); |
[abc] - на этом месте может располагаться любой из символов a, b либо c; |
abc - последовательное расположение символов a, b, c; |
((abc)|(def)) - на этом месте последовательно располагаются abc либо def, () - группа символов. |
Ссылки:
http://www.opennet.ru/docs/RUS/perlre_man/ - регулярные выражения Perl, практически идентичны Java.
http://j2w.blogspot.com/2008/01/java.html - регулярные выражения Java.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html - спецификация на английском.
XSLT - язык, основанный на формате XML. Его назначение - трансформация XML дерева с данными в какой-либо результирующий формат. Например: TXT, XHTML (HTML документ, соответсвующий правилам формата XML). Трансформация производится XSLT процессором.
Версия 2.0 является существенным расширением версии 1.0, ключевые изменения можно посмотреть здесь: http://www.xmlhack.ru/texts/02/xslt20/xslt20.html
В XSLT шаблоне различаются просто теги, которые без изменений перейдут в результирующий документ и управляющие теги для процессора с префиксом xslt. Пример фрагмента XSLT документа:
<tbody> <xsl:for-each select="bills/bill"> <xsl:variable name="uid" select="@uid"/> <tr> <td nowrap="nowrap"><xsl:value-of select="@number"/></td> <td><xsl:value-of select="@create_dt"/></td> <td><xsl:value-of select="@pay_dt"/></td> <td nowrap="nowrap"><xsl:value-of select="@summ"/></td> <td nowrap="nowrap"> <xsl:choose> <xsl:when test="@status=0">не оплачен</xsl:when> <xsl:otherwise>оплачен</xsl:otherwise> </xsl:choose> </td> <td> <xsl:choose> <xsl:when test="$uid=-1">создан Вами</xsl:when> <xsl:otherwise>создан администратором</xsl:otherwise> </xsl:choose> < /td>
Здесь форматируется XHTML документ, при этом используются стандартые HTML теги (tr, td) и управляющие теги поцессора (xsl:choose, xsl:value-of). Рассмотрим несколько XSLT директив, встречающихся в приведенном фрагменте:
- для каждого узла исходного дерева XML данных выполнить то что указано до- создать переменную uid и присвоить ей значение из атрибута uid текущего узла bill
- вставить значение атрибута number текущего элемента bill
- условный оператор, аналог case либо if-else, внутри могу быть несколько <xsl:when> условий и действие по умолчанию <xsl:otherwise> Ниже приведены ссылки на руководства по XSLT. Язык разметки XSLT тесно завязан с языком XPath - языком выборки данных в XML деревьях. XSLT процессор "Saxon HE" используемый в BGCRM поддерживает спецификации XSLT и XPath версий 2.0 и 2.0.
http://ru.wikipedia.org/wiki/XSLT - статья в Wikipedia
http://www.xmlhack.ru/texts/02/xslt20/xslt20.html - отличия XSLT 2.0 от 1.0 версии
http://www.xmlhack.ru/texts/02/xpath20/xpath20.html - отличия XPath 2.0 от 1.0 вервсии
http://www.saxonica.com/documentation/functions/intro.xml - реализованные в процессере Saxon функции XSLT
http://www.w3.org/TR/xslt20/ - XSLT 2.0 спецификация
http://www.w3.org/TR/xpath20/ - XPath 2.0 спецификация
http://www.w3.org/TR/xpath-datamodel/ - модель данных XPath
JEXL - язык условий. Используется для написания в конфигурации макросов условных выражений. Помимо операторов, описание которых доступно по ссылке в конце раздела, язык поддерживает обращение к функциям Java - объектов, переданных на вход обработчика в зависисимости от условий. Для вызова функции Java объекта необходимо ввести название объекта в контексте, точку и непосредственно вызов функции.
Пример использования выражения:
processCreateLink.1.title=Проект (Уфа) processCreateLink.1.processTypeId=9260 processCreateLink.1.linkType=processDepend processCreateLink.1.checkExpression=1 =~ processParam.addressCityIds( 90 ) and process.getStatusId() == 39 processCreateLink.1.copyParams=90,89,238 processCreateLink.1.copyLinks=1
В данном случае создание связанного процесса будет доступно только для процессов в статусе с кодом 39 и с наличием адреса в параметре с кодом 90 с городом 1.
В JEXL процессор всегда передаются объекты:
ru.bgcrm.Utils - возможность вызова статических функций; | - статический контекст объекта
org.apache.commons.lang.StringUtils - возможность вызова статических функций; | - статический контекст объекта
org.apache.commons.collections.CollectionUtils - возможность вызова статических функций. | - статический контекст объекта
Дополнительные объекты передаются в зависимости от места использования.
Ссылки:
Log4j - библиотека логирования для Java. Настройка логирования производится в файле
, изменение файла можно производить при работающем приложении. Вид файла при установке системы:log4j.rootLogger=INFO, file log4j.logger.ru.bgcrm=INFO, file log4j.additivity.ru.bgcrm=false log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n log4j.appender.file.File=./log/bgcrm.log log4j.appender.file.Append=true log4j.appender.file.BufferedIO=false log4j.appender.file.BufferSize=1024 log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.MaxFileSize=10MB
Сообщения в логе разделяются на уровни (в порядке возрастания):
, , , , . По-умолчанию настроен уровень INFO, т.е. выводятся информационные и ошибочные сообщения (INFO, FATAL, ERROR), отладка не выводится. Вывод осуществляется в файл , который обрезается на размере 10МБ с созданием отдельных файлов.Для включения вывода отладочной информации необходимо установить:
log4j.logger.ru.bgcrm=DEBUG, file
В конфигурационном файле возможно изменять формат информации в файле, фильтр по классам и другие параметры логирования.
Ссылки:
http://artamonov.ru/2007/04/06/vvedenie-v-log4j/ - вводная статья на русском.