开发者

OpenEJB : Configuring MDBs with custom ConnectionFactory

As described in OpenEJB docs, we can configure JMS connection factory and queues, and they will appear in JNDI as:

openejb:Resource/MyJmsConnectionFactory, 
openejb:Resource/MyQueue
  1. Given those J开发者_StackOverflow中文版NDI entries, how can I tell to MDB to use them?

  2. Is it possible to change JNDI name, for example ConnectionFactory to appear as java:/ConnectionFactory or ConnectionFactory


Things work differently than you may be imagining. Specifying that an MDB is tied to a javax.jms.Queue and the name of that queue is part of the EJB specification and done via the ActivationConfig, like so:

@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) {
    }
}

The MDB container itself is not actually JMS-aware at all. It simply understands that it should hook the bean up to a specific Resource Adapter.

<openejb>
    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
        ServerUrl tcp://someHostName:61616
    </Resource>

    <Container id="MyJmsMdbContainer" ctype="MESSAGE">
        ResourceAdapter MyJmsResourceAdapter
    </Container>
</openejb>

The above shows an MDB Container hooked up to a Resource Adapter that uses JMS via ActiveMQ.

Here is an example that shows an MDB Container hooked up to a Quartz Resource Adapter

It isn't possible to tell the MDB Container about JMS specific things as per specification, the relationship is much more generic than that. This blog post gives some insight as to how things work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜