友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JMS简明教程(PDF格式)-第24章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




    XAConnectionFactory 对象是JMS 受管理对象,就像ConnectionFactory 对象。期望用应 

用服务器使用JNDI 找到它们。  



8。4  XAConnection  



    XAConnection 通过提供创建XASession 扩展了Connection 的能力。  



8。5  XASession  



    XASession 提供了获取看起来象普通 Session          对象的对象和控制会话事务上下文的 

javax。transaction。xa。XAResource 对象。XAResource 的功能非常类似于标准X/Open XA 资源接 

口定义的功能。  

    应用服务器通过获取XAResource 来控制XASession  的事务分配。它使用XAResource 来 

将会话分配给分布式事务,准备和提交事务上的工作等等。  

    XAResource 为多事务上的交叉工作、恢复处理中的事务列表等等提供了公平的专业工 

具。JTA 感知的JMS 提供上必须全部实现这个功能。这可以通过使用支持XA  的数据库服务 

来做到,或者JMS 提供商可以选择从基础开始来实现这个功能。  

    将XASession 的Session 赋给应用服务器的客户端。之后,应用服务器控制后台XASession 

的事务管理。  

    但必须注意的是,分布式事务上下文不会随着消息流动;也就是说,接收消息的事务和 

和生产消息的事务不能是同一个。这是异步消息和同步处理间的基本差别。消息生产者和消 

费者使用两种方式来建立JMS 提供商保证一次只有一个消息被转发的能力。  

    再次重申,在Session 中生产和/或消费消息的行为都可以是事务性的。在不同会话间生 

产和消费一个特定消息的行为不能是事务性的。  



8。6  JMS 应用服务器接口  



    PTP 和Pub/Sub 两个域都提供了它们自己的JTS 感知的JMS 工具。  

    但是,应当优先使用公共接口。表8�1 列出了JMS 的公共接口。  

                            表8�1 域内可选接口的关系  



      JMS 公共接口                    PTP 接口                  Pub/Sub 接口  



     ServerSessionPool        没有域特定的接口                 没有域特定的接口  



       ServerSession          没有域特定的接口                 没有域特定的接口  



    ConnectionConsumer        没有域特定的接口                 没有域特定的接口  



    XAConnectionFactory    XAQueueConnectionFactory  XATopicConnectionFactory  



                                                                      54 / 66  

  


…………………………………………………………Page 55……………………………………………………………

                                               



        XAConnection               XAQueueConnection               XATopicConnection  



          XASession                  XAQueueSession                 XATopicSession  



                                                                             



9  JMS 样例代码  



     本章给出了一些展示JMS 客户端如何使用JMS API 的代码样例。也解释了如何使用几个 

消息类型。这些例子使用了支持统一消息模型的方法:这些例子使用点对点或发布/订阅进 

行工作。用JMS API 进行工作是推荐的方式。  

     在JMS 规范的早期版本中,只支持消息域(点对点或发布/订阅)各自的接口,且客户 

端要么使用点对点要么使用发布/订阅来进行编程。现在,JMS 客户端可以使用JMS 公共接 

口进行编程。  

     在例子中,客户端应用发送和接收股票报价信息。客户端应用从股票报价服务中接收消 

息。股票报价服务在这个例子中没有描述。  

     为了简化这个例子,没有对异常进行处理。  

     本章描述了为发送和接收消息而创建正确环境的步骤。  

     在描述了基本的功能后,本章描述如何执行一些其他的公共功能,例如使用消息选择器。  



9。1  准备发送和接收消息  



     下面是建立连接然后准备发送和接收消息的基本步骤。  

     z   获得ConnectionFactory 和Destination。  

     z   创建Connection 和Session 。  

     z   创建MessageConsumer。  

     z   创建MessageProducer。  



9。1。1 获取ConnectionFactory  



     消息生产者和消息消费者(发送者和接收者)都需要得到ConnectionFactory,并使用它 

来建立Connection 和Session 。  

     通常,管理员已经为JMS 客户端创建和配置好了ConnectionFactory 。客户端程序通常使 

用JNDI API 来查找ConnectionFactory 。  

     import javax。naming。*;  

     import javax。jms。*;  

     ConnectionFactory connectionFactory;  

     Context messaging = new InitialContext();  

     connectionFactory = (ConnectionFactory)   

          messaging。lookup(〃ConnectionFactory〃);  



                                                                                    55 / 66  

  


…………………………………………………………Page 56……………………………………………………………

                                                   



9。1。2 获取Destination  



     管理员已经创建和配置了一个名字为“StockQueue ”的Queue,它是股票报价消息被发 

送和接收的地方。同样,可以使用JNDI API 来查找目的地。  

     Queue stockQueue;  

     stockQueue = (Queue)messaging。lookup(〃StockSource〃);  



9。1。3 创建Connection  



     在得到ConnectionFactory 之后,客户端程序使用它来创建Connection 。  

     Connection connection;  

     connection = ConnectionFactory。createConnection();  



9。1。4 创建Session  



     在得到 Connection        之后,客户端程序使用它来创建 Session 。这个 Session                           用于创建 

MessageProducer  (发送消息)或MessageConuser  (接收消息)。  

     Connection。createSession 方法有两个参数:  

     z    一个表示会话是否是事务性的布尔。  

     z    消息确认模式。  

     Session session;  

     /* Session is not transacted;   

     *   uses AUTO_ACKNOWLEDGE for message  

     *  acknowledgement  

     */  

     session = connection。createSession(false; Session。AUTO_ACKNOWLEDGE);  



9。1。5 创建MessageProducer  



     在得到 Session        后,客户端程序使用 Session                    来创建 MessageProducer 。这个 

MessageProducer 对象用于向目的地发送消息。通过使用Session。createProducer 方法来创建 

MessageProducer,参数是消息被发送的目的地。  

     MessageProducer sender;  

     /* Value in stockQueue previously looked up in the JNDI  

     *  createProducer takes a Destination  

     */  

     sender = session。createProducer(stockQueue);  



9。1。6 创建MessageConsumer  



     消息可以被同步或异步的消费。这个例子展示了如何创建同步消费消息的消息消费者。 



                                                                                            56 / 66  

  


…………………………………………………………Page 57……………………………………………………………

                                                



参见9。3。1  “异步接收消息”了解如何异步消费消息。  

     MessageConsumer
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!