企业信息产品正在成为使内部公司运作一体化的基本部件,也让一些相互独立的商业部件利用它组合成一个可靠的、更灵活的、有弹性的系统。另外对于传统的
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