如OpenEJB文档中所述,我们可以配置JMS连接工厂和队列,它们将在JNDI中显示为: OpenEJB的:资源/ MyJmsConnectionFactory, OpenEJB的:资源/ myQueue中
鉴于这些JNDI条目,我如何告诉MDB使用它们?
是否可以更改JNDI名称,例如ConnectionFactory显示为java:/ ConnectionFactory 或ConnectionFactory
答案 0 :(得分:3)
事情与你想象的不同。指定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>
上面显示了一个连接到资源适配器的MDB容器,该资源适配器通过ActiveMQ使用JMS。
以下示例显示了连接到Quartz Resource Adapter
的MDB容器根据规范,无法告诉MDB容器有关JMS特定事物,这种关系比这更通用。这个blog post提供了一些关于事情如何运作的见解。