总算找到了一个利用Message-Driven-Bean(MDB)建queue的方法。
一般来说,在ejb-jar.xml和 jboss.xml 里定义好MDB后,Jboss在扩展EJB包的时候会创建相应的Queue。但目前我需要的不只是一个普通的queue,而是要让message保留的queue,也就说并非first come, first out,而是人工手动对queue里的message进行删除,重发等操作。
那么怎样才能让message bean对messages拒收呢?
在*bean.class里onMessage(Message msg) 是必不可少的,就算是个空block,也会照常接收queue里的message,只是不做任何处理罢了,毕竟MDB是一个特殊的message listner 和receiver。
所以在程序里是无法对message的接收进行控制的,也只能在配置文件里动手脚了。
最后终于发现了这么一个参数,<message-selector>, 这个是作为message 的filter 来使用的,这样MDB只会接收满足条件的message。
在我的实例里使用了如下语句:
<message-selector><![CDATA[ JMS_JBOSS_REDELIVERY_DELAY < 0 ]]></message-selector>
条件语句满足SQL-92的语法,执行参数为message的property。
参考links:
http://javaboutique.internet.com/resources/books/EntJavaBeans/entjava4_1.html
http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html
分享到:
相关推荐
Java中的Message-Driven Bean (MDB) 是Enterprise JavaBeans (EJB) 规范的一部分,用于处理JMS(Java Message Service)消息。这个压缩包“基于Java的源码-Message-Driven Bean EJB实例源代码.zip”显然包含了实现...
- 使用`@MessageDriven`注解标记该类,指定JMS目的地类型(队列或主题),以及其他配置属性。 - 在ejb-jar.xml或元数据注解中配置MDB,如JNDI名称、消息驱动适配器等。 6. **源代码解析**: 压缩包中的源代码...
在EJB项目中,我们需要在ejb-jar.xml或@MessageDriven注解中配置MDB的相关属性,如消息监听接口、JMS目的地类型(队列或主题)、JNDI名称等。 **4. MDB的源码分析** 在提供的源码中,我们可能会看到以下关键组件: ...
### Message-Driven Bean (MDB) 培训知识点解析 #### 一、Java消息服务(JMS) **1.1 Java消息服务概念** Java消息服务(Java Message Service,简称JMS)是一种面向消息中间件的标准API,它使得Java应用程序能够...
1. **MDB类定义**:MDB类需要实现 javax.jms.MessageListener 接口,并且通常会带有 @MessageDriven 注解。例如: ```java import javax.ejb.MessageDriven; import javax.jms.MessageListener; import javax.jms....
@MessageDriven(activationConfig={ @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination", propertyValue=...
你需要在类上添加这个注解,并指定消息驱动接口,例如`@MessageDriven(name = "MyMDB", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })...
3. **配置激活规范**:通过在@MessageDriven注解中的activationConfig属性,我们可以设置MDB订阅的消息类型(如TextMessage、ObjectMessage等)、目的地(queue或topic)以及JNDI名称等。 4. **部署MDB**:将MDB类...
Message-Driven Bean是Java EE服务器中的一个特殊类型的Enterprise Bean,它的主要职责是接收并处理由消息队列(Message Queue)传递的消息。这种设计模式使得应用能够解耦生产者和消费者,提高系统的可扩展性和可靠...
- 在编写Message-Driven Bean时,为了防止有毒消息,通常采用Container管理事务,不抛出异常,或者只抛出RuntimeException。 9. **资源引用**: - DataSource的引用属于资源注入,通常用于连接数据库,同样适用于...
- `@MessageDriven` 注解:标记Bean为消息驱动。 - `@ActivationConfigProperty`:配置与JMS资源相关的属性,如目的地类型、目的地名称等。 - 实现`MessageListener`接口或使用`@Inject` JMS消息。 例如: ```java ...
@MessageDriven(destination = "example.queue") public class ExampleMessageListener implements MessageListener { @Override public void onMessage(Message message) { // 处理接收到的消息 } } ``` #...
- MDB类必须使用`@MessageDriven`注解,如果未使用部署描述符。 - 类必须声明为public。 - 类不能声明为abstract或final。 - 它必须有一个没有参数的公共构造函数。 - 不应定义`finalize`方法,因为容器会管理其生命...
- MDB可以通过在类上使用`@MessageDriven`注解进行配置。 - 可以使用`@ActivationConfigProperty`注解来指定MDB的激活配置属性,例如JMS目的地、消息选择器等。 - 示例代码片段如下: ```java @MessageDriven...
本文档主要介绍了在Java EJB3环境中,如何实现三种不同类型的Bean:实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message-Driven Bean)。 1. 开发环境: - **MyEclipse 7.0**:这是一个...
消息驱动Bean(Message Driven Bean,MDB)是EJB的一种特殊类型,它专注于处理消息队列(Queue)或主题(Topic)中的消息,实现异步处理。在本例中,我们将探讨如何使用EJB消息驱动Bean处理Queue和Topic。 1. **...
例如,`@MessageDriven` 注解用于标记类为MDB,`@ActivationConfigProperty` 用于设置与JMS 相关的属性。 - **部署描述符**: 部署描述符(如ejb-jar.xml 或者META-INF/ejb-jar.xml)可以用来进一步配置MDB,但EJB ...
在EJB3中,创建一个MDB非常简单,只需要在bean类上添加`@MessageDriven`注解,并指定消息驱动的类型,如`@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")`来定义...
- **消息驱动Bean(Message-Driven Beans)**:处理JMS(Java Message Service)消息,提供了更简单的声明式事务管理。 2. **JSF 1.2(JavaServer Faces)** - JSF是一个用于构建用户界面的MVC(Model-View-...
2. **配置MDB**:通过EJB部署描述符(ejb-jar.xml)或注解(如@MessageDriven)配置MDB。 3. **与JMS集成**:通过JNDI查找并配置ConnectionFactory和Destination。 ### 四、总结 JMS提供了强大的消息通信机制,...