1

如 OpenEJB 文档中所述,我们可以配置 JMS 连接工厂和队列,它们将在 JNDI 中显示为:

openejb:Resource/MyJmsConnectionFactory, 
openejb:Resource/MyQueue
  1. 鉴于这些 JNDI 条目,我如何告诉 MDB 使用它们?

  2. 是否可以更改 JNDI 名称,例如 ConnectionFactory 显示为java:/ConnectionFactoryConnectionFactory

4

1 回答 1

3

事情的运作方式可能与您想象的不同。指定 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 特定的事情,这种关系比这更通用。这篇博客文章提供了一些关于事情如何运作的见解。

于 2010-10-23T02:18:54.373 回答