Транзакции JMS и платформа SOA. (перевод, часть 3)

Продолжение. См. предыдущую часть.

Быстрый старт - в деталях

Транзакция в "быстром старте" включает себя две вещи - сообщение JMS и запись в базу данных. Давайте начнем с изучения подключения к базе данных HSQLDB, которая используется в "быстром старте". Во-первых, нам необходимо создать источник данных для определения подключения к базе данных.

В файле: quickstart-ds.xml:

01.<datasources>
02.<local-tx-datasource>
03.<jndi-name>JmsTransactedDB</jndi-name>
04.<connection-url>jdbc:hsqldb:hsql://localhost:1706</connection-url>
05.<driver-class>org.hsqldb.jdbcDriver</driver-class>
06.<user-name>sa</user-name>
07.<password></password>
08.<min-pool-size>5</min-pool-size>
09.<max-pool-size>20</max-pool-size>
10.<idle-timeout-minutes>0</idle-timeout-minutes>
11.<depends>jboss:service=JmsTransactedDB</depends>
12.<prepared-statement-cache-size>32</prepared-statement-cache-size>
13.</local-tx-datasource>
14. 
15.<mbean code="org.jboss.internal.soa.esb.dependencies.HypersonicDatabase"
16.name="jboss:service=JmsTransactedDB">
17.<attribute name="Port">1706</attribute>
18.<attribute name="BindAddress">localhost</attribute>
19.<attribute name="Database">JmsTransactedDB</attribute>
20.<attribute name="Silent">true</attribute>
21.<attribute name="Trace">false</attribute>
22.<attribute name="No_system_exit">true</attribute>
23.<attribute name="DataDir">${jboss.server.data.dir}</attribute>
24.</mbean>
25.</datasources>

Некоторые пояснения (исправил неточности, ниже. - Прим. перев.):
  • Строка 2. - Мы опеределяем local-tx-datasource так, чтобы можно было использовать JCA-подключение с поддержкой транзакций. [6]
  • Строка 3. - Мы используем JNDI-имя, для ссылки на этот источник данных (datasource).
  • Строки 5-13. - драйвер класса базы данных, соединение, URL, логин/пароль и т.д., для подключения к базе данных.
  • Строка 15. -Интерфейс MBean для работы СУБД Hypersonic в той же самой виртуальной Java-машине, в которой работает и JBoss. Запомним, что здесь у нас название сервиса, а так же JNDI-имя, все это нам скоро потребуется.
 ОК, у нас есть datasource, который нужен для подключения к базе данных HSQLDB, и это нам нужно в режиме поддержки транзакций. Что теперь? Мы должны гарантировать, что наша база данных на самом деле существует, прежде чем мы попытаемся ее использовать! К счастью, у SOA платформы есть класс, который может инициализировать базу данных при развертывании (deployed) .esb-приложения.

В файле jbossesb-service.xml:

01.<?xml version="1.0" encoding="UTF-8"?>
02. 
03.<server>
04.<mbean code="org.jboss.internal.soa.esb.dependencies.DatabaseInitializer"
05.name="jboss.esb:service=JmsTransactedDatabaseInitializer">
06.<attribute name="Datasource">java:/JmsTransactedDB</attribute>
07.<attribute name="ExistsSql">select * from jms_transacted_table</attribute>
08.<attribute name="SqlFiles">
09.hsqldb/create.sql
10.</attribute>
11.<depends>jboss.jca:name=JmsTransactedDB,service=DataSourceBinding</depends>
12.</mbean>
13.</server>

В этом файле есть несколько (3) интересных вещей:
  • Строка 4. - Этот MBean создается при запуске базы данных. Как его подключить к базе данных? Смотри строку 6.
  • Строка 6. - Это ссылка на наш datasource. Обратите внимание на JNDI-имя, которое мы определили в datasource. Как сделать, чтобы DatabaseInitializer знал, какую искать схему в базе данных? Смотри строку 9.
  • Строка 9. - Вот ссылка на файл из "быстрого старта" - src/hsqldb/create.sql. Этот файл создает очень простую таблицу в нашей базе данных, для использования в "быстром старте".
В файле src/hsqldb/create.sql:

1.create table jms_transacted_table
2.(
3.unique_id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,
4.data_column VARCHAR(255) NOT NULL
5.);

(см. продолжение)

Комментариев нет:

Отправить комментарий