OpenEJB:使用自定义ConnectionFactory配置MDB

时间:2010-10-20 13:35:45

标签: ejb openejb

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

  1. 鉴于这些JNDI条目,我如何告诉MDB使用它们?

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

1 个答案:

答案 0 :(得分: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 Resource Adapter

的MDB容器

根据规范,无法告诉MDB容器有关JMS特定事物,这种关系比这更通用。这个blog post提供了一些关于事情如何运作的见解。