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