无法使用资源注释在JBoss 6.1.0中注入JMS QueueConnectionFactory

时间:2012-02-10 11:56:00

标签: java jboss ejb jms

我花了很多时间来解决JBoss 6.1.0的问题,在我的会话bean中注入JMS连接工厂。我正在使用带有默认配置文件的JBoss 6.1.0并在debian中运行它。

我的代码片段是:

@Resource(name="java:/QueueConnectionFactory")
private QueueConnectionFactory factory

有jboss6 / server / default / deploy / hornetq / hornetq-jms.xml:

<connection-factory name="QueueConnectionFactory" signature="queue">
        <xa>true</xa>
        <connectors>
           <connector-ref connector-name="in-vm"/>
        </connectors>
        <entries>
            <entry name="java:/QueueConnectionFactory"/>           
        </entries>
    </connection-factory>

在部署我的ear-file时,我收到此错误:

  

指定的任何mapped-name / lookup / jndi-name和任何ResourceProvider都不能处理名为env / java的resource-ref:/ javax.jms.QueueConnectionFactory类型的QueueConnectionFactory

尽管队列工厂在管理控制台中可见,但它无法在我的会话bean中注入队列连接工厂。

2 个答案:

答案 0 :(得分:2)

最后,我找到了问题的答案:

@Resource注释中,还需要具有真实JNDI资源名称的mappedName属性。

答案 1 :(得分:0)

这是一个可以生成JMS的简单MDB,它可以在JBoss 6.1.0中运行

此处的工作代码:https://github.com/OpenRAP/jboss6-jms-chat

@MessageDriven(activationConfig = {
@ActivationConfigProperty(
        propertyName = "destinationType",
        propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(
        propertyName = "destination",
        propertyValue = "queue/questionqueue"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "durable")})
public class ChatBean implements MessageListener {

@Resource(mappedName = "java:/JmsXA")
private ConnectionFactory queueConnectionFactory;

@Resource(mappedName = "queue/answerqueue")
private Queue answerQueue;

public void onMessage(Message message) {}
}