如OpenEJB文档中所述,我们可以配置JMS连接工厂和队列,它们将在JNDI中显示为:
openejb:Resource/MyJmsConnectionFactory,
openejb:Resource/MyQueue
鉴于那些JNDI条目,我如何告诉MDB使用它们?
是否可以更改JNDI名称,例如ConnectionFactory显示为java:/ConnectionFactory
或ConnectionFactory
事情的运作方式与您想象的不同。指定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>
上面显示了通过ActiveMQ连接到使用JMS的资源适配器的MDB容器。
这里是显示MDB容器连接到Quartz Resource Adapter的示例
不可能根据规范告诉MDB容器有关JMS的特定信息,这种关系比这要通用得多。此blog post提供了有关工作原理的一些见解。