我正在尝试编写一个非常简单的JMS应用程序,以便在Glassfish上进行部署,以此来了解JMS。
在课堂上发送消息我有以下内容:
@Resource(mappedName="jms/MyConnectionFactory")
public static QueueConnectionFactory factory;
@Resource(mappedName="jms/MyQueue")
public static Queue queue;
这会导致NullPointer,这是我第一次尝试访问工厂。但是,如果我尝试使用JNDI查找对象,它可以正常工作。这个类只是一个POJO,由一个在简单的Web应用程序中运行的JSP访问。
是因为它是POJO而不是,例如,这是一个失败的servlet?
我原以为它在Glassfish内部署和运行的事实就足够了 - 显然我错了......
答案 0 :(得分:5)
使用name
代替mappedName
。 name
是JNDI名称,mappedName
是其他名称。见the API doc
@Resource(name="jms/MyConnectionFactory")
public static QueueConnectionFactory factory;
我刚刚读到你的课是一个简单的POJO。您的类必须是由容器管理的某个bean才能使这些注释工作。喜欢@Stateless,@ Stateful,@ Singleton。