我正在测试一些关于Paraya 5的JMS工作。具体来说是5.181。下面是我简单的无状态bean的代码。 public function mensajes(Request $request) {
//return $request->all();
if ($request->input('nombre') != ''){
return "Sí tiene nombre. Es ". $request->input('nombre') ." y su correo es ". $request->input('email');
} else {
return "No tiene nombre";
}
}
失败了! @JMSConnectionFactory
变量始终为JMSContext context
。但是null
成功了...有什么想法为什么?我更喜欢使用@Resource(lookup = "jms/HelloWorldConnectionFactory")
。
JMSContext
正如请注意,@Stateless
public class HelloWorldMessageSender {
@JMSConnectionFactory("jms/HelloWorldConnectionFactory")
protected JMSContext context;
@Resource(lookup = "jms/HelloWorldConnectionFactory")
protected ConnectionFactory connectionFactory;
@Resource(lookup = "jms/HelloWorldQueue")
protected Queue queue;
public String send() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
String txt = String.format("Hello world message %s", sdf.format(new Date()));
if (context != null) {
System.out.printf("Use JMSContext to produce%n");
context.createProducer().send(queue, txt);
}
if (connectionFactory != null) {
System.out.printf("Use ConnectionFactory to produce%n");
try (
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
) {
TextMessage message = session.createTextMessage();
message.setText(txt);
producer.send(message);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return txt;
}
}
bean正在JSF @Stateless
bean中使用。我正在使用简单的CDI注入来获取@Named
bean,如下所示:
@Stateless
答案 0 :(得分:5)
注释@JMSConnectionFactory
必须与@Inject
一起使用,否则它不会产生任何影响。它只是添加了用于注射的元数据,但不会导致任何注射发生。
从JMS 2.0规范PDF中的示例中可以清楚地看出:
@Inject
@JMSConnectionFactory("jms/connectionFactory")
private JMSContext context;
另一方面,@Resource
注释足以进行注入,因为它们由EJB容器处理,后者将它们作为注入点处理。因此,您应该使用单个@Resource
注释,或同时使用@Inject
和@JMSConnectionFactory
。