企業信息產品正在成為使內部公司運作一體化的基本部件,也讓一些相互獨立的商業部件利用它組合成一個可靠的、更靈活的、有彈性的系統。另外對于傳統的
MOM提供商,企業信息產品也是被一些有名的數據庫開發商和許多與internet相聯系的公司所提供。Java語言客戶端和Java語言中間層肯定有能
力結合和使用這些企業信息產品,那么JMS(Java message
service)提供了這種能力,它是以SUN公司領導和發起開發的一套標準的JAVA API。這套JAVA API(JMS
API)提供了一個標準的方法去建立、發送、和接收一個企業信息系統的信息,它是一個接口的集合并且定義了一個JMS客戶端如何獲取企業信息產品的工具的
一套規則。因為信息是對等的, 所有的JMS客戶一般都被當作客戶端來看待。JMS API也可以
和其他的JAVA API相結合,它甚至和JDBC API在同一個事務內運作而相安無事,它也可以直接地和Java Transaction API
(JTA)、Java Transaction Service API (JTS)一起工作。不要把JMS
API當作JavaBeans,它最初的設計并不是作為JavaBeans部件來設計的,但是JavaBeans能夠使用它的session發送和接收信
息。不要忘了Java Naming and Directory Interface API(JNDI), 沒有它我們也無法配置和尋找JMS對象。
JMS的應用有以下幾個部分組合而成:
一、 JMS Clients: 它們是java 語言程序用來發送和接收信息的。
二、 Non-JMS Clients: 它們是本地的信息系統的API構建的而不是用JMS API。
三、 Messages: 每一個應用都要定義一個信息集合用來在客戶端進行信息通訊。
四、 JMS Provider: 實現JMS的一個信息系統,除了管理和控制之外,這也是一個完整的信息產品的必須的特征。
五、 Administrated Objects: 由客戶端預先配置創建的JMS對象。
JMS的管理方法:
有兩個JMS管理對象的類型:
一、 ConnectionFactory: 客戶端用這個對象創建連接。
二、 Destination: 客戶端指定的接收或發送的一個信息源。
管理者將Administrated Objects放在一個叫JNDI namespace的地方。
JMS兩種信息風格:
一、 POINT-TO-POINT(PTP)
二、 PUBLISH-AND-SUBSCRIBE(PUB/SUB)
JMS的接口:
根據采用的信息風格其接口對象也是不同的:
公用對象:
ConnectionFactory、Connection、Destination、Session、MessagerPoducer、MessageConsumer
PTP專用對象:
QueueConnectionFactory、QueueConnection、Queue、QueueSession、QueueSender、QueueReceiver or QueueBrowser
PUB/SUB專用對象:
TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber
開發一個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