关于消息驱动 Bean

另请参见

消息驱动 Bean 是一种 Enterprise Bean,它使得 J2EE 应用程序能够异步处理消息。该 Bean 用作 Java 消息服务 (Java Message Service, JMS) 消息侦听程序,此消息侦听程序类似于事件侦听程序,不同的是消息驱动 Bean 接收消息而不是事件。消息可以由任何 J2EE 组件(应用程序客户端、其他 Enterprise Bean 或 Web 组件)发送。

为什么使用消息驱动 Bean?

如果要避免占用更多的服务器资源,您可能需要使用消息驱动 Bean 代替会话 Bean。通过会话 Bean 和实体 Bean,也可以发送和接收 JMS 消息,但它们以同步方式运行,而不是像消息驱动 Bean 那样异步运行。

会话 Bean 与实体 Bean 的比较

与会话 Bean 和实体 Bean 不同,消息驱动 Bean 的客户端不通过接口对其进行访问。消息驱动 Bean 只有一个 Bean 类。

在某些方面,消息驱动 Bean 类似于无态会话 Bean:

消息驱动 Bean 实例的实例变量可以维护客户端消息处理过程中的状态信息,如对 Enterprise Bean 对象的对象引用。

消息处理

当消息到达时,容器将调用消息驱动 Bean 的 onMessage 方法来处理此消息。onMessage 方法通常将消息强制转换为五个 JMS 消息类型之一,然后根据应用程序的业务逻辑处理此消息。onMessage 方法可能会调用帮助程序方法,或者调用会话 Bean 或实体 Bean 来处理消息中的信息,然后可能会将结果存储在数据库中。

很多消息驱动 Bean 类的实例可以并行执行,从而能够并行处理消息流。因为无法保证以准确的顺序将消息传送到这些实例,所以必须准备使用消息驱动 Bean 来处理序列以外的消息。例如,取消保留的消息会在确认保留的消息之前被传送。

事务

容器将提供带有 MessageDrivenContext 的消息驱动 Bean 实例,MessageDrivenContext 使 Bean 实例能够访问由容器为其维护的上下文。根据 Bean 是管理自身的事务还是依赖容器的事务管理,此 Bean 可以通过访问 MessageDrivenContext 的不同方法来处理事务。

另请参见
发送 JMS 消息
关于实体 Bean
关于会话 Bean
创建 Enterprise Bean
关于业务方法

法律声明