Медиатор DB Report аналогичен медиатору DBLookup. Разница между ними заключается в том, что медиатор DB Report может записывать информацию в базу данных, используя SQL-запрос INSERT.
Синтаксис
Синтаксис медиатора DBReport изменяется в зависимости от того, используется ли соединение с базой данных через пул подключений или через источник данных.
Соединение с БД через пул подключений
<dbreport> <connection> <pool> ( <driver/> <url/> <user/> <password/> <dsName/> <icClass/> <url/> <user/> <password/> ) <property name="name" value="value"/>* </pool> </connection> <statement> <sql>insert into something values(?, ?, ?, ?)</sql> <parameter [value="" | expression=""] type="CHAR|VARCHAR|LONGVARCHAR|NUMERIC|DECIMAL|BIT|TINYINT|SMALLINT|INTEGER|BIGINT|REAL|FLOAT|DOUBLE|DATE|TIME|TIMESTAMP"/>* </statement>+ </dbreport>
Соединение с БД через источник данных
Синтаксис медиатора DB Report также отличается в зависимости от того, используется ли подключение к базе данных через внешний источник данных или через встроенный источник данных Carbon.
Внешний источник данных
<dbreport> <connection> <pool> <dsName/> <icClass/> <url/> <user/> <password/> <property name="name" value="value"/>* </pool> </connection> <statement> <sql>select something from table where something_else = ?</sql> <parameter [value="" | expression=""] type="CHAR|VARCHAR|LONGVARCHAR|NUMERIC|DECIMAL|BIT|TINYINT|SMALLINT|INTEGER|BIGINT|REAL|FLOAT|DOUBLE|DATE|TIME|TIMESTAMP"/>* </statement>+ </dbreport>
Встроенный источник данных Carbon
<dbreport> <connection> <pool> <dsName/> </pool> </connection> <statement> <sql>select something from table where something_else = ?</sql> <parameter [value="" | expression=""] type="CHAR|VARCHAR|LONGVARCHAR|NUMERIC|DECIMAL|BIT|TINYINT|SMALLINT|INTEGER|BIGINT|REAL|FLOAT|DOUBLE|DATE|TIME|TIMESTAMP"/>* </statement>+ </dbreport>
Конфигурация
Конфигурация медиатора DBReport изменяется в зависимости от того, используется ли соединение с базой данных через пул подключений или через источник данных.
Пул соединений
Следующий интерфейс отображается, когда вы выбираете опцию Соединение с БД для параметра Тип соединения, указывая, что подключение должно быть выполнено через пул подключений.
При указании подключения к базе данных через пул подключений, помимо ввода параметров напрямую, вы также можете указать следующие параметры подключения (например, Driver, URL, User и Password) как ссылки на записи в реестре. Преимущество использования записи реестра заключается в том, что одна и та же конфигурация подключения может использоваться в разных средах за счет простого изменения значения записи в реестре. Чтобы настроить такое поведение, укажите путь к реестру в атрибуте key (Ключ конфигурации), как показано в примере ниже.
<dblookup xmlns="http://ws.apache.org/ns/synapse"> <connection> <pool> <password key="conf:/repository/esb/password"/> <driver key="conf:/repository/esb/driver"/> <url key="conf:/repository/esb/url"/> <user key="conf:/repository/esb/username"/> </pool> </connection> </dblookup>
Если вы хотите задать значение записи в реестре через консоль управления, укажите путь к реестру с помощью префикса $registry.
Для медиатора DB Report доступны следующие параметры настройки:
Имя параметра | Описание |
Транзакция использования соединения |
Этот параметр указывает, должна ли операция с базой данных выполняться в рамках транзакции.
Чтобы включить несколько операций с базой данных в рамках одной транзакции в конкретном потоке сообщений, отметьте этот чек-бокс.
При этом, при увеличении количества операций требуется больше времени для завершения транзакции. Если одновременно поступает множество сообщений, могут активироваться несколько транзакций одновременно.
По умолчанию максимальное количество активных транзакций составляет 50, как установлено реализацией Atomikos JTA. Чтобы изменить это значение, создайте файл с именем transaction.properties в директории <EI_HOME>/lib и добавьте в него следующее свойство: com.atomikos.icatch.max_actives=1000 Установка этого значения в -1 позволяет использовать неограниченное количество транзакций. Настройте значение в зависимости от ваших потребностей и уровня параллелизма сервиса. Если вы отметите данный чек-бокс для выполнения операции с базой данных в рамках транзакции, убедитесь в следующем:
|
Драйвер БД подключения | Имя класса драйвера базы данных. |
Url-адрес подключения |
JDBC URL базы данных, в которую будет производиться запись данных. Установите параметр autoReconnect в значение true, чтобы помочь заново подключиться в БД в случае, если соединение между клиентом и базой данных было потерянно. Например, <url>jdbc:mysql://<ip>:<port>/test?autoReconnect=true</url>. |
Имя пользователя соединения | Имя пользователя для подключения к базе данных. |
Пароль соединения | Пароль для подключения к базе данных. |
Добавление свойств в медиатор DB Report
При нажатии на значок Добавить раскроется страница со следующими параметрами
Имя параметра | Описание |
Name | Имя свойства. |
Value | Значение свойства. |
Action | Делает возможным удаление свойства. |
Доступны следующие свойства.
Имя | Значение | Описание |
autocommits | true / false | Указывает, должно ли соединение, созданное пулом, находиться в состоянии автоматической фиксации (auto-commit). |
isolation | Connection.TRANSACTION_NONE / Connection.TRANSACTION_READ_COMMITTED / Connection.TRANSACTION_READ_UNCOMMITTED / Connection.TRANSACTION_REPEATABLE_READ / Connection.TRANSACTION_SERIALIZABLE | Определяет уровень изоляции соединений, создаваемых пулом. |
initialsize | int | Количество соединений, создаваемых при запуске пула. |
maxactive | int | Максимальное число активных соединений, которые могут быть выделены из пула одновременно. Если этот предел достигнут, новые активные соединения не будут созданы. Укажите 0 или отрицательное значение, чтобы не устанавливать ограничение. |
maxidle | int | Максимальное количество неактивных соединений, разрешённых в пуле подключений в определённый момент времени. Укажите значение 0 или отрицательное число, если вы хотите, чтобы пул ожидал неограниченно долго. |
maxopenstatements | int | Максимальное число открытых запросов, которые могут быть созданы пулом запросов одновременно. Если предел достигнут, новые запросы не будут создаваться. Укажите 0 или отрицательное значение, чтобы не устанавливать ограничение. |
maxwait | long | Максимальное число миллисекунд, которое пул будет ожидать освобождения соединения, прежде чем выбросить исключение, если в пуле нет доступных соединений. Укажите 0 или отрицательное значение, чтобы пул ждал неограниченно долго. |
minidle | int | Минимальное количество неактивных соединений, разрешенных в пуле подключений в каждый момент времени. Укажите значение 0 или отрицательное число, если вы хотите, чтобы пул ожидал неограниченно долго. |
poolstatements | true/ false | Если значение true, пул выражений будет включен. |
testonborrow | true/ false | Если значение true, объекты валидируются перед их использованием. Если объект не проходит тест, он удаляется из пула, и вместо него берется другой объект. |
testwhileidle | true/ false | Если значение true, неактивные объекты валидируются с помощью средства высвобождения (если оно существует), если оно существует. Объекты, не прошедшие тест, удаляются из пула. |
validationquery | String |
SQL-запрос, используемый для проверки соединений из пула перед их возвращеннием клиенту. Это свойство помогает восстановить соединение между клиентом и базой данных в случае его разрыва. Например, <property name="validationquery" value="select 1"/>. |
Источник данных
Конфигурация пользовательского интерфейса медиатора DBRepot также зависит от того, используется ли подключение к базе данных через внешний источник данных или через встроенный источник данных Carbon.
Внешний
Следующий интерфейс отображается, если вы выбираете опцию Внешний для параметра Тип DS соединения, указывающую, что подключение к базе данных должно выполняться с использованием внешнего источника данных.
Доступные параметры для настройки медиатора DBReport следующие:
Имя параметра | Описание |
Транзакция использования соединения | Этот параметр указывает, должна ли операция с базой данных выполняться в рамках транзакции. Отметьте данный чек-бокс по необходимости. |
Исходный контекст DS соединения | Класс фабрики начального контекста. Соответствующее свойство Java-окружения: java.naming.factory.initial. |
Имя DS соединения | URL-адрес поставщика службы имен. Соответствующее свойство Java окружения: java.naming.provider.url. |
URL-адрес соединения | JDBC URL базы данных, в которую будут записываться данные. |
Имя пользователя соединения | Имя пользователя для подключения к базе данных. |
Пароль соединения | Пароль для подключения к базе данных. |
Добавление свойств в медиатор DB Report
При нажатии на значок Добавить раскроется страница со следующими параметрами.
Имя параметра | Описание |
Name | Имя свойства. |
Value | Значение свойства. |
Action | Делает возможным удаление свойства. |
Доступны следующие свойства.
Имя | Значение | Описание |
autocommit | true / false | Указывает, должно ли соединение, созданное пулом, находиться в состоянии автоматической фиксации (auto-commit). |
isolation | Connection.TRANSACTION_NONE / Connection.TRANSACTION_READ_COMMITTED / Connection.TRANSACTION_READ_UNCOMMITTED / Connection.TRANSACTION_REPEATABLE_READ / Connection.TRANSACTION_SERIALIZABLE | Определяет уровень изоляции соединений, создаваемых пулом. |
initialsize | int | Количество соединений, создаваемых при запуске пула. |
maxactive | int | Максимальное число активных соединений, которые могут быть выделены из пула одновременно. Если этот предел достигнут, новые активные соединения не будут созданы. Укажите 0 или отрицательное значение, чтобы не устанавливать ограничение. |
maxidle | int | Максимальное количество неактивных соединений, разрешенных в пуле подключений в конкретный момент времени. Укажите значение 0 или отрицательное число, если вы хотите, чтобы пул ожидал неограниченно долго. |
maxopenstatements | int | Максимальное число открытых запросов, которые могут быть созданы пулом запросов одновременно. Если предел достигнут, новые запросы не будут создаваться. Укажите 0 или отрицательное значение, чтобы не устанавливать ограничение. |
maxwait | long | Максимальное число миллисекунд, которое пул будет ожидать освобождения соединения, прежде чем выбросить исключение, если в пуле нет доступных соединений. Укажите 0 или отрицательное значение, чтобы пул ждал неограниченно долго. |
minidle | int | Минимальное количество неактивных соединений, разрешенных в пуле подключений в каждый момент времени. Укажите значение 0 или отрицательное число, если вы хотите, чтобы пул ожидал неограниченно долго. |
poolstatements | true/ false | Если значение true, пул выражений будет включен. |
testonborrow | true/ false | Если значение true, объекты валидируются перед их использованием. Если объект не проходит тест, он удаляется из пула, и вместо него берется другой объект. |
testwhileidle | true/ false | Если значение true, неактивные объекты валидируются с помощью средства высвобождения (если оно существует), если оно существует. Объекты, не прошедшие тест, удаляются из пула. |
validationquery | String | SQL-запрос, используемый для проверки соединений из пула перед их возвращением клиенту. |
Встроенные источник данных Carbon
Следующий интерфейс отображается, если в параметре Тип DS соединения вы выбираете опцию Встроенный, указывая тем самым, что подключение к базе данных должно выполняться с использованием источника данных Carbon.
Имя параметра | Описание |
Транзакция использования соединения | Этот параметр указывает, должна ли операция с базой данных выполняться в рамках транзакции. |
Имя DS соединения | Этот параметр используется для выбора конкретного источника данных Carbon для подключения. В списке отображаются все доступные в данный момент источники данных Carbon. |
Добавление SQL-запроса в медиатор DB Report
При нажатии на значок Добавить, откроется страница со следующими полями.
Имя параметра | Описание |
Строка запроса | Этот параметр используется для ввода одного или нескольких SQL-запросов. |
Параметры | Этот раздел используется для указания, как будут определяться значения параметров в SQL-запросе. Значение параметра может быть статическим или вычисляться во время выполнения на основе заданного выражения. |
Тип данных |
Тип данных Тип данных параметра. Возможные значения:
|
Тип значения |
Определяет, должно ли значение параметра быть статическим или вычисляться во время выполнения через выражение.
|
Выражение значения | Параметр используется для ввода статического значения или выражения XPath для расчета значения свойства (в зависимости от того, что выбрано в поле Тип значения). |
Action | Эта функция позволяет удалить параметр. |
Результаты |
Этот блок используется чтобы указать, как следует обрабатывать результат, возвращенный при выполнении запроса к базе данных.
|
Примеры
Простая операция записи в базу данных
Этот пример демонстрирует простые операции записи в базу данных. Медиатор DB Report записывает данные в таблицу, используя данные из сообщения. Он обновляет цену акций компании, используя последнее значение котировки, которое вычисляется через XPath-выражение.
<dbreport xmlns="http://ws.apache.org/ns/synapse"> <connection> <pool> <driver>org.apache.derby.jdbc.ClientDriver</driver> <url>jdbc:derby://localhost:1527/esbdb;create=false</url> <user>esb</user> <password>esb</password> </pool> </connection> <statement> <sql><![CDATA[update company set price=? where name =?]]></sql> <parameter expression="//m0:return/m1:last/child::text()" type="DOUBLE" xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"/> <parameter expression="//m0:return/m1:symbol/child::text()" type="VARCHAR" xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"/> </statement> </dbreport>
Выполнение операции записи в базу данных в рамках транзакции
В этом примере <transaction action="new"/> – это конфигурация медиатора Transaction, которая запускает новую транзакцию. Конфигурация медиатора DBReport выполняет несколько операций записи, включая удаление записей, если имя соответствует определенному значению, вычисленному выражением, а также несколько вставок. После завершения операций с базой данных они фиксируются с помощью <transaction action="commit"/>, что представляет собой еще одну конфигурацию медиатора Transaction.
<definitions xmlns="http://ws.apache.org/ns/synapse"> <sequence name="myFaultHandler"> <log level="custom"> <property name="text" value="** Rollback Transaction**"/> </log> <transaction action="rollback"/> <send/> </sequence> <sequence name="main" onError="myFaultHandler"> <in> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </in> <out> <transaction action="new"/> <log level="custom"> <property name="text" value="** Reporting to the Database EIdb**"/> </log> <dbreport useTransaction="true" xmlns="http://ws.apache.org/ns/synapse"> <connection> <pool> <dsName>java:jdbc/XADerbyDS</dsName> <icClass>org.jnp.interfaces.NamingContextFactory</icClass> <url>localhost:1099</url> <user>EI</user> <password>EI</password> </pool> </connection> <statement> <sql>delete from company where name =?</sql> <parameter expression="//m0:return/m1:symbol/child::text()" xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd" type="VARCHAR"/> </statement> </dbreport> <log level="custom"> <property name="text" value="** Reporting to the Database EIdb1**"/> </log> <dbreport useTransaction="true" xmlns="http://ws.apache.org/ns/synapse"> <connection> <pool> <dsName>java:jdbc/XADerbyDS1</dsName> <icClass>org.jnp.interfaces.NamingContextFactory</icClass> <url>localhost:1099</url> <user>EI</user> <password>EI</password> </pool> </connection> <statement> <sql>INSERT into company values (?,'c4',?)</sql> <parameter expression="//m0:return/m1:symbol/child::text()" xmlns:m1="http://services.samples/xsd" xmlns:m0="http://services.samples" type="VARCHAR"/> <parameter expression="//m0:return/m1:last/child::text()" xmlns:m1="http://services.samples/xsd" xmlns:m0="http://services.samples" type="DOUBLE"/> </statement> </dbreport> <transaction action="commit"/> <send/> </out> </sequence> </definitions>
Другие примеры