我正在尝试运行EJB 3.2规范的第281页的示例,但它会产生错误。简而言之,我在Glassfish 4中创建了一个队列jms / StockQueue,我可以使用@Resource(lookup =“jms / StockQueue”)为它注入一个引用。所以我的无状态bean MyBean成功地引用了队列。
@Stateless
public class MyBean {
@Resource(lookup = "jms/StockQueue")
private Queue queue;
public void sendMessage() {
System.out.println(queue);
}
}
但规范中的StockServiceBean没有获得对队列的引用。
@Resource(name = "jms/StockQueue", type = javax.jms.Queue.class)
@Stateless
public class StockServiceBean {
public void processStockInfo() {
try {
Context initCtx = new InitialContext();
System.out.print(initCtx.lookup("java:comp/env/jms/StockQueue"));
} catch (NamingException ex) {
ex.printStackTrace();
}
}
}
相反,它会产生错误:
SEVERE: javax.naming.NamingException: Lookup failed for 'java:comp/env/jms/StockQueue' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: No object bound for java:comp/env/jms/StockQueue [Root exception is java.lang.NullPointerException]]
奇怪的是,如果不是Queue,我查找ConnectionFactory,该示例按预期工作。 谁能帮助我运行这个例子?我很感激你的建议。谢谢。 最好的祝福, 玛丽安
答案 0 :(得分:0)
我遇到与connectionFactory / @Resource / @Stateless类似的问题。在部署时,@ Resource注入试图注入我的服务bean,但最后还没有被Weld实例化(因为他有一个@Dependent范围)
我决定使用connectionFactory手动查看函数,它可以正常工作