企業(yè)信息產(chǎn)品正在成為使內(nèi)部公司運(yùn)作一體化的基本部件,也讓一些相互獨(dú)立的商業(yè)部件利用它組合成一個(gè)可靠的、更靈活的、有彈性的系統(tǒng)。另外對(duì)于傳統(tǒng)的
MOM提供商,企業(yè)信息產(chǎn)品也是被一些有名的數(shù)據(jù)庫(kù)開(kāi)發(fā)商和許多與internet相聯(lián)系的公司所提供。Java語(yǔ)言客戶端和Java語(yǔ)言中間層肯定有能
力結(jié)合和使用這些企業(yè)信息產(chǎn)品,那么JMS(Java message
service)提供了這種能力,它是以SUN公司領(lǐng)導(dǎo)和發(fā)起開(kāi)發(fā)的一套標(biāo)準(zhǔn)的JAVA API。這套JAVA API(JMS
API)提供了一個(gè)標(biāo)準(zhǔn)的方法去建立、發(fā)送、和接收一個(gè)企業(yè)信息系統(tǒng)的信息,它是一個(gè)接口的集合并且定義了一個(gè)JMS客戶端如何獲取企業(yè)信息產(chǎn)品的工具的
一套規(guī)則。因?yàn)樾畔⑹菍?duì)等的, 所有的JMS客戶一般都被當(dāng)作客戶端來(lái)看待。JMS API也可以
和其他的JAVA API相結(jié)合,它甚至和JDBC API在同一個(gè)事務(wù)內(nèi)運(yùn)作而相安無(wú)事,它也可以直接地和Java Transaction API
(JTA)、Java Transaction Service API (JTS)一起工作。不要把JMS
API當(dāng)作JavaBeans,它最初的設(shè)計(jì)并不是作為JavaBeans部件來(lái)設(shè)計(jì)的,但是JavaBeans能夠使用它的session發(fā)送和接收信
息。不要忘了Java Naming and Directory Interface API(JNDI), 沒(méi)有它我們也無(wú)法配置和尋找JMS對(duì)象。
JMS的應(yīng)用有以下幾個(gè)部分組合而成:
一、 JMS Clients: 它們是java 語(yǔ)言程序用來(lái)發(fā)送和接收信息的。
二、 Non-JMS Clients: 它們是本地的信息系統(tǒng)的API構(gòu)建的而不是用JMS API。
三、 Messages: 每一個(gè)應(yīng)用都要定義一個(gè)信息集合用來(lái)在客戶端進(jìn)行信息通訊。
四、 JMS Provider: 實(shí)現(xiàn)JMS的一個(gè)信息系統(tǒng),除了管理和控制之外,這也是一個(gè)完整的信息產(chǎn)品的必須的特征。
五、 Administrated Objects: 由客戶端預(yù)先配置創(chuàng)建的JMS對(duì)象。
JMS的管理方法:
有兩個(gè)JMS管理對(duì)象的類(lèi)型:
一、 ConnectionFactory: 客戶端用這個(gè)對(duì)象創(chuàng)建連接。
二、 Destination: 客戶端指定的接收或發(fā)送的一個(gè)信息源。
管理者將Administrated Objects放在一個(gè)叫JNDI namespace的地方。
JMS兩種信息風(fēng)格:
一、 POINT-TO-POINT(PTP)
二、 PUBLISH-AND-SUBSCRIBE(PUB/SUB)
JMS的接口:
根據(jù)采用的信息風(fēng)格其接口對(duì)象也是不同的:
公用對(duì)象:
ConnectionFactory、Connection、Destination、Session、MessagerPoducer、MessageConsumer
PTP專(zhuān)用對(duì)象:
QueueConnectionFactory、QueueConnection、Queue、QueueSession、QueueSender、QueueReceiver or QueueBrowser
PUB/SUB專(zhuān)用對(duì)象:
TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber
開(kāi)發(fā)一個(gè)JMS客戶端的流程:
一、 用JNDI找到一個(gè)ConnectionFactory對(duì)象。
二、 用JNDI找到一個(gè)Destination對(duì)象。
三、 用ConnectionFactory對(duì)象建立一個(gè)JMS Connection對(duì)象。
四、 用JMS Connection對(duì)象建立一個(gè)或多個(gè)JMS Session對(duì)象。
五、 用一個(gè)Session和Destination建立一個(gè)MessageProducer和MessageConsumer對(duì)象。
六、 用Connection對(duì)象開(kāi)始信息遞交。
JMS的多線程:
JMS對(duì)象中有一部分是被自動(dòng)共享的,因此JMS限制那些被自動(dòng)共享的對(duì)象使之不能夠被一個(gè)多線程的程序所存取,下面列出了哪些對(duì)象能夠被共享:
自動(dòng)共享的對(duì)象:
一、 Destination
二、 ConnectionFactory
三、 Connection
不被共享的對(duì)象:
一、 Session
二、 MessageProducer
三、 MessageConsumer
JMS消息的格式:
JMS提供了系列的API來(lái)完成信息的格式,我們必須嚴(yán)格按照這些格式來(lái)傳遞信息。
一、 信息頭
JMSDestination,JMSDeliveryMode,JMSExpiration,JMSPriority,
JMSMessageID,JMSTimestamp,JMSCorrelationID,JMSReplyTo,
JMSType,JMSRedelivered
二、 信息屬性
JMSXUserID,JMSAppID,JMSXDeliveryCount, JMSXGroupID,
JMSXGroupSeq,JMSXProducerTXID,JMSXConsumerTXID,
JMSXRcvTimestamp,JMSXState
三、 信息體(提供了五種信息體,每一種信息體有自己專(zhuān)用的接口)
StreamMessage,MapMessage,TextMessage,ObjectMessage,BytesMessage