OpenEJB: настройка MDB с помощью настраиваемой фабрики соединений - PullRequest
1 голос
/ 20 октября 2010

Как описано в документации OpenEJB, мы можем настроить фабрику соединений JMS и очереди, и они будут отображаться в JNDI как: OpenEJB: Ресурс / MyJmsConnectionFactory, OpenEJB: Ресурс / MyQueue

  1. Учитывая эти записи JNDI, как я могу сказать MDB использовать их?

  2. Можно ли изменить имя JNDI, например ConnectionFactory, чтобы оно отображалось как java: / ConnectionFactory или ConnectionFactory

1 Ответ

3 голосов
/ 23 октября 2010

Все работает иначе, чем вы можете себе представить. Указание того, что 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. Он просто понимает, что должен подключить компонент к определенному адаптеру ресурса.

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

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

Выше показан контейнер MDB, подключенный к адаптеру ресурсов, который использует JMS через ActiveMQ.

Вот пример, показывающий контейнер MDB, подключенный к Кварцевому адаптеру ресурса

Невозможно рассказать MDB-контейнеру о специфических для JMS вещах в соответствии со спецификацией, отношения гораздо более общие, чем это. Это сообщение в блоге дает некоторое представление о том, как все работает.

...