Все работает иначе, чем вы можете себе представить. Указание того, что 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 вещах в соответствии со спецификацией, отношения гораздо более общие, чем это. Это сообщение в блоге дает некоторое представление о том, как все работает.