Триггер базы данных и JMS - PullRequest
3 голосов
/ 18 июля 2011

Могу ли я создать триггер для отправки сообщения с записью в JMS?Если да, как я могу это сделать?Заранее спасибо!

1 Ответ

11 голосов
/ 19 июля 2011

Я бы обобщил ваши варианты следующим образом:

Базы данных, поддерживающие JMS

Oracle - единственная из известных мне баз данных, которая изначально поддерживает JMS в виде Oracle Advanced Queuing . Если получатель вашего сообщения не слишком заинтересован в реализации JMS, обычно можно найти какой-то мост для обмена сообщениями, который преобразует и пересылает сообщения из одной реализации JMS в другую. Например:

Базы данных, поддерживающие Java

Некоторые базы данных, такие как Oracle и DB2 , имеют встроенную виртуальную машину Java и поддерживают загрузку сторонних библиотек (Jars) и пользовательских классов, которые могут быть вызваны кодом триггера. , В зависимости от требований вашего JMS-клиента это может быть проблемой из-за поддерживаемой версии Java (если вам нужна Java 5+, но БД поддерживает только Java 3). Также имейте в виду, что многопоточность в некоторых из этих встроенных JVM не соответствует ожидаемой , но можно также ожидать, что отправка сообщений JMS может быть более прощающей, чем получение то же самое.

Базы данных, поддерживающие внешние вызовы (но не в Java)

Некоторые базы данных поддерживают различные способы запуска асинхронных событий для подключенных клиентов, которые могут, в свою очередь, перенаправлять сообщения JMS, созданные из полезной нагрузки события:

Некоторые базы данных (все перечисленные выше, включая SQLServer ) позволяют отправлять SMTP-сообщения из процедурного кода базы данных (который может вызываться триггерами). Хотя это и не JMS, прослушиватель почты может потенциально прослушивать почтовые сообщения (которые могут иметь тело сообщения JSON или XML) и пересылать это содержимое в виде сообщения JMS.

Основной альтернативой этого являются пакеты баз данных, которые позволяют сообщениям HTTP вызывать внешние источники, где у вас может быть сервлет, прослушивающий и пересылающий представленное содержимое в виде сообщения JMS.

Другие базы данных, такие как Postgres, поддерживают не-Java языки, такие как Perl , Python и Tcl , где вы можете использовать некоторые умные сценарии для отправки сообщения внешний преобразователь сообщений, который будет пересылаться как JMS. Active MQ (и, следовательно, его мост сообщений) поддерживает многоязычный клиент JMS, который включает Python и Perl многие другие ).

Самый низкий общий знаменатель

Если не считать всего этого, ваш триггер может записать событие в таблицу, а внешний клиент может опрашивать содержимое таблицы, искать новые данные и пересылать сообщения JMS, когда он их обнаружит. Сообщение JMS может либо включать контент, либо просто указывать, что контент существует и что такое PK, и потребитель может прийти и получить его.

Этот метод широко поддерживается в Apache Camel , который имеет адаптеры (технически называемые Компоненты) специально для опроса баз данных:

События, считанные из таблицы базы данных Camel, могут быть преобразованы и направлены в различные пункты назначения, включая сервер JMS (в форме сообщения JMS). Реализация этого Camel довольно проста и хорошо документирована, так что это не плохой путь.

Надеюсь, это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...