Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

понедельник, 27 февраля 2012 г.

OpenMQ database persistence in Glassfish

JMS-провайдер в сервере Glassfish является OpenMQ - сановская (а теперь оракловая) разработка с открытым исходным кодом.

По-умолчанию, OpenMQ записывает данные в файлы. Это не всегда хорошо, я столкнулся с тем, что при вырубании Глассфиша по kill -9 PID файловое хранилище OpenMQ портится и с восстановлением сообщений в очередях и топиках возникают проблемы. Поэтому имеет смысл рассмотреть переход на хранение сообщений в СУБД. Мы рассмотрим MySQL.

Пусть директория, в которую установлен Глассфиш обозначается как GLASSFISH_HOME. Тогда нужно отредактировать файл с настройками OpenMQ: GLASSFISH_HOME/glassfish/domains/domain1/imq/instances/imqbroker/props/config.properties. Добавим в него следующие строки:

imq.brokerid=imqbroker
imq.persist.store=jdbc
imq.persist.jdbc.dbVendor=mysql
imq.persist.jdbc.mysql.property.url=jdbc:mysql://localhost:3306/mqdb
imq.persist.jdbc.mysql.createdburl=jdbc:mysql://localhost:3306/mqdb
imq.persist.jdbc.mysql.needpassword=true
imq.persist.jdbc.mysql.user=USERNAME
imq.persist.jdbc.mysql.password=PASSWORD

Таким образом, мы настроили сохранение JMS-данных в БД. Нужно еще положить JAR-файл с драйвером БД (mysql-connector-java-5.1.17-bin.jar) в каталог GLASSFISH_HOME/mq/lib/ext.

Теперь создадим БД. Для этого воспользуемся утилитой imqdbmgr, которая находится в каталоге GLASSFISH_HOME/mq/bin. Пишем команду:
./imqdbmgr create all -b imqbroker
и получаем следующие таблицы в БД:

MQBKR41Simqbroker       
MQCON41Simqbroker       
MQCONSTATE41Simqbroker  
MQCREC41Simqbroker      
MQDST41Simqbroker       
MQJMSBG41Simqbroker     
MQMSG41Simqbroker       
MQPROP41Simqbroker      
MQSES41Simqbroker       
MQTMLRJMSBG41Simqbroker 
MQTXN41Simqbroker       
MQVER41Simqbroker
Теперь можно запускать сам Глассфиш - сохранение JMS-данных пойдет в БД, а не в файлы.

Когда создавалась БД, я столкнулся с одной проблемой. Дело в том, что у меня в MySQL кодировкой по умолчанию является UTF-8. Это проблема для OpenMQ, т.к. при создании таблицы MQTMLRJMSBG41Simqbroker появляются ошибки. Но эта проблема решается очень просто - для этого для данной Бд нужно объявить кодировку latin1:

ALTER DATABASE mqdb DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;

Тогда все пройдет без ошибок.

Полезные ссылки:

OpenMQ, the Open source Message Queuing, for beginners and professionals (OpenMQ from A to Z)

Browse OpenMQ source code

Oracle GlassFish Message Queue 4.4.2 Technical Overview

Oracle GlassFish Message Queue 4.4.2 Administration Guide

Постоянные читатели