码迷,mamicode.com
首页 > 其他好文 > 详细

EJB初级篇--EJB组件之消息驱动Bean

时间:2014-11-30 16:54:31      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   ar   color   os   使用   

     会话Bean部署在服务端的JBoss中,然后客户端程序Java或者JSP调用服务端的JNDI服务,即可实现会话Bean的调用。可以说会话Bean实现了服务的分布式调用。可是这种调用采用的是同步方式,即客户端和服务端的调用时同步进行的。如下图所示:

bubuko.com,布布扣

     为什么说远程方法调用时同步的呢?通常,在服务器完成客户请求前,它一直处于等待(阻塞)状态。只有在服务器处理完请求后,客户才能够接受到执行结果,从而继续执行,这就是同步执行

     可是这种情况显然对于用户体验来说是极其不好的。用户不需要管服务器端处理他的请求需要多长时间,他只需要他可以方便快捷的完成他想要的工作就好。说到这里有没有联想到什么?是的,就是AJAX,它的出现就是为了解决这种因同步方式而带给用户不便的问题。那么在EJB中又是如何解决这个问题的呢?没错,就是我们本篇博文的主要内容---消息驱动Bean

     如下图所示,消息取代了远程方法调用,可以将消息想象成客户和服务器间存在的“中间人”。中间人从若干消息生产者接受消息,然后将这些消息广播给若干消息消费者。由于中间人的存在,使得消息生产者能够在发送消息后继续执行。这样整个过程就是异步编程

bubuko.com,布布扣

     而支持这种消息处理的基础框架我们可以称之为MOMMessage-Oriented Middleware:面向消息中间件)。可是各个MOM系统都是专有的,它们都有各自的API,这使得最终用户被所锁定在特定厂商上,不易于移植和学习。这时候就出现了JMSJava Message ServiceJava消息服务),它是一种消息标准,使得开发人员只需要学习JMS API即可,而且符合JMS规范的消息代码都能够在不同MOM间实现灵活移植。

     关于JMS如何创建、发送或接受消息我们再此不做详细介绍了,仅以一图来供大家了解。

bubuko.com,布布扣

 

     大概了解了JMS,那么JMS究竟和EJB是如何结合使用的呢?我们本篇介绍的MDB就是基于JMSEJB组件--消息驱动Bean。但是我们需要注意的是,MDB组件不仅能够接受JMS消息,还能够接受其他类型的消息。不管是什么类型的消息,一旦来到,EJB容器就将调用MDB实例去处理它。

 

bubuko.com,布布扣

     由上图我们可以看到,MDB和发送消息的客户处于松耦合的关系,客户不能够借助于业务接口访问到MDB,也就是客户不能引用MDB,也不能够同它直接交互。客户需要借助于消息提供者提供的API(如JMS)发送消息,然后接受到该消息MDB将负责处理它。

 

     知道什么是MDB了,下面就来说说MDB具体特征吧。

1)不存在远程或者本地业务接口;

     会话Bean中业务接口分为远程和本地两种业务接口以供客户端调用。但是在MDB中则不存在。因为MDB只是处理来自消息客户发送而来的消息,开发者不需要调用MDB,所以就不需要MDB具有业务接口。

2)无状态的;

     MDB和无状态会话Bean类似在会话状态上是类似的,两者都没有会话状态。所有的MDB实例都是匿名的,EJB容器对所有MDB实例一视同仁

3)单线程的;

     在同一时刻,单个MDB实例仅能处理单个消息。那么它是如何来实现并发操作的呢?EJB容器会在池中维护多个MDB实例,并且负责将消息排好队,分发给MDB实例处理,从而提供并发消费消息的能力。

4)支持各种用于消息分发的监听器方法;

     MDB只是从目的地或者资源适配器接受消息,它对于消息的具体内容并不知情。那么它是如何确定使用了正确的MDB组件呢?是EJB容器来完成的。EJB容器会调用MDB所实现的监听接口中的某些方法,这些方法将会接受到消息(如JMS消息)。然后开发者在实现这些方法(如JMS API消息监听接口的onMessage()方法)时,会采用if语句判断消息类型,然后针对它进行处理。

 

     以上是我现在了解的一些关于MDB的理论知识,不知道你明白了一些吗?

EJB初级篇--EJB组件之消息驱动Bean

标签:des   style   blog   http   io   ar   color   os   使用   

原文地址:http://blog.csdn.net/sunliduan/article/details/41623833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!