2

为什么我们只能在 EJB 中的消息驱动 bean 中设置单一目标类型?

@MessageDriven(activationConfig = { 
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
@ActivationConfigProperty(propertyName = "destination", propertyValue = "FileProcess"), 
@ActivationConfigProperty(propertyName = "transactionTimeout", propertyValue = "3600"), 
@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "100") })
@TransactionManagement(value = TransactionManagementType.CONTAINER)
public class FileMDB implements MessageListener {

  //.....
}

我想为单个 MSD 添加多个目标类型,我可以在 MDB 类中添加多个队列名称或目标类型吗?

4

1 回答 1

0

简短的回答是:因为 Sun(和 JSR 专家组)就是这样设计的。

更长的答案:我猜您需要处理许多队列,这些队列都包含相同格式的消息,并且消息来自何处对您的服务无关紧要。你可以:

  1. 实现一个基类实现MessageListener接口并从它继承任意多次,每次应用不同的@ActivationConfigProperty注解。
  2. (更好的选择)如果您的消息传递系统允许,创建一个额外的队列并配置您的应用程序感兴趣的所有队列以将消息传递到该队列。然后,您可以保留当前的 ​​MDB 配置,而无需生成样板代码。
于 2013-07-04T14:17:43.360 回答