2011-07-18 68 views
3

Cound我創建一個觸發器來向JMS發送記錄消息?如果是,我該怎麼辦? 在此先感謝!數據庫觸發器和JMS

+0

你在使用什麼數據庫引擎?不同的數據庫引擎可能有內置的API。 –

+0

@anhdv:你可以很好地從DB觸發器調用java函數,一旦你在java函數中,你可以編寫你想要的所有java代碼... – ag112

回答

10

我會總結你的選項如下:

數據庫支持JMS

Oracle是我所知道的,支持JMS本身在Oracle Advanced Queueing形式的唯一數據庫。如果您的消息接收者對該JMS實現不太感興趣,通常可以找到某種消息橋接器,將消息從一個JMS實現轉換並轉發到另一個JMS實現。例如:

數據庫支持Java

一些數據庫如OracleDB2有一個內置的Java虛擬機,並支持第三方的加載庫(Jars)和可以由觸發器代碼調用的自定義類。根據您的JMS客戶端的要求,考慮到Java支持的版本(如果您需要Java 5+,但該數據庫僅支持Java 3),這是一個問題。另外請記住,對這些嵌入式JVM中的某些嵌入式JVM進行線程化是not what you might expect it to be,但也可能期望JMS消息的發送可能比接收相同的消息更加寬容。

數據庫支持外部調用(但不是在爪哇)

幾個數據庫支持觸發異步事件,以從事件的有效負載建立連接的客戶端,其可以反過來向前JMS消息的不同的手段:

某些數據庫(以上所有和包括SQLServer)都允許您從數據庫過程代碼(可以通過觸發器調用)發送SMTP消息。雖然它不是JMS,但郵件偵聽器可能偵聽郵件消息(可能方便地具有JSON或XML消息正文),並將此內容作爲JMS消息轉發。

這是一個基本的替代方案,它允許HTTP帖子向外部源發出呼叫,在這些外部源可能有一個servlet偵聽並將提交的內容作爲JMS消息轉發。

其他數據庫如Postgres的支持非Java語言,如PerlPythonTcl,你可能會使用一些聰明的腳本將消息發送到外部消息的變壓器,將作爲轉發JMS。活動MQ(以及其消息橋)支持包含PythonPerl(和many others)的多語言JMS客戶端。

最小公分母

短的一切,你的觸發器可以將事件寫入表和外部客戶端可以查詢表的內容,尋找新的數據和轉發JMS消息時,發現它。 JMS消息既可以包含內容,也可以簡單地表明內容存在以及PK的內容,並且消費者可以來獲取它。

這是專門爲輪詢數據庫廣泛支持Apache Camel一種技術,其具有適配器(技術上稱爲組件):

然後可以轉換Camel從數據庫表中讀取的事件,並將其路由到各種目標,包括JMS服務器(以JMS消息的形式)。實施這個駱駝是相當直接和有據可查的,所以這不是一個壞的路要走。

我希望這是有幫助的。

+0

非常感謝你! –

+3

快樂。要標記接受的答案? – Nicholas

+0

@Nicholas原生MYSQL支持使用觸發器調用java程序 – pavan