tags:

views:

20

answers:

1

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 JNDI 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

+1  A: 

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.

David Blevins