当使用@Stateless bean时,Payara 5 @JMSConnectionFactory无法注入

时间:2018-03-27 16:23:19

标签: java jms ejb cdi payara

我正在测试一些关于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

1 个答案:

答案 0 :(得分:5)

注释@JMSConnectionFactory必须与@Inject一起使用,否则它不会产生任何影响。它只是添加了用于注射的元数据,但不会导致任何注射发生。

从JMS 2.0规范PDF中的示例中可以清楚地看出:

@Inject @JMSConnectionFactory("jms/connectionFactory") private JMSContext context;

另一方面,@Resource注释足以进行注入,因为它们由EJB容器处理,后者将它们作为注入点处理。因此,您应该使用单个@Resource注释,或同时使用@Inject@JMSConnectionFactory