我花了很多时间来解决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中注入队列连接工厂。
答案 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) {}
}