如 OpenEJB 文档中所述,我们可以配置 JMS 连接工厂和队列,它们将在 JNDI 中显示为:
openejb:Resource/MyJmsConnectionFactory,
openejb:Resource/MyQueue
鉴于这些 JNDI 条目,我如何告诉 MDB 使用它们?
是否可以更改 JNDI 名称,例如 ConnectionFactory 显示为
java:/ConnectionFactory
或ConnectionFactory
事情的运作方式可能与您想象的不同。指定 MDB 绑定到 javax.jms.Queue 并且该队列的名称是 EJB 规范的一部分,并通过 ActivationConfig 完成,如下所示:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(
propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(
propertyName = "destination",
propertyValue = "FooQueue")})
public static class JmsBean implements MessageListener {
public void onMessage(Message message) {
}
}
MDB 容器本身实际上根本不支持 JMS。它只是理解它应该将 bean 连接到特定的资源适配器。
<openejb>
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
ServerUrl tcp://someHostName:61616
</Resource>
<Container id="MyJmsMdbContainer" ctype="MESSAGE">
ResourceAdapter MyJmsResourceAdapter
</Container>
</openejb>
上面显示了一个 MDB 容器连接到一个通过 ActiveMQ 使用 JMS 的资源适配器。
这是一个显示连接到Quartz 资源适配器的 MDB 容器的示例
不可能按照规范告诉 MDB 容器有关 JMS 特定的事情,这种关系比这更通用。这篇博客文章提供了一些关于事情如何运作的见解。