Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Payara 5@JMSConnectionFactory在使用@Stateless bean时无法注入_Java_Jms_Ejb_Cdi_Payara - Fatal编程技术网

Java Payara 5@JMSConnectionFactory在使用@Stateless bean时无法注入

Java Payara 5@JMSConnectionFactory在使用@Stateless bean时无法注入,java,jms,ejb,cdi,payara,Java,Jms,Ejb,Cdi,Payara,我正在测试Paraya 5上的一些JMS工作。特别是5.181。下面是我的简单无状态bean的代码@JMSConnectionFactory失败!JMSContext上下文变量始终为null。然而,@Resource(lookup=“jms/HelloWorldConnectionFactory”)成功了……你有没有想过为什么?我更喜欢使用JMSContext @Stateless public class HelloWorldMessageSender { @JMSConnectio

我正在测试Paraya 5上的一些JMS工作。特别是5.181。下面是我的简单无状态bean的代码
@JMSConnectionFactory
失败!
JMSContext上下文
变量始终为
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正在名为bean的JSF
@内部使用。我使用简单的CDI注入来获取无状态bean,如下所示:

@Named(value = "helloWorldMessageController")
@RequestScoped
public class HelloWorldMessageController {

    @Inject
    protected HelloWorldMessageSender sender;

    // ....
}

注释
@JMSConnectionFactory
必须与
@Inject
一起使用,否则不会产生任何效果。它只是为注入添加元数据,但不会导致任何注入发生

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

@Inject
@JMSConnectionFactory(“jms/connectionFactory”)
私有JMSContext上下文;


另一方面,
@Resource
注释对于注入来说已经足够了,因为它们由EJB容器处理,EJB容器将它们作为注入点处理。因此,您应该要么使用单个
@Resource
注释,要么同时使用
@Inject
@JMSConnectionFactory

Ahhh!你说得太对了。我看代码太久了,只是错过了
@Inject
。干杯这个很简单,很高兴能帮上忙:)