【发布时间】:2018-09-06 03:54:30
【问题描述】:
我正在测试 Paraya 5 上的一些 JMS 工作。特别是 5.181。下面是我的简单无状态 bean 的代码。 @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;
}
}
请注意,@Stateless bean 正在 JSF @Named bean 内部使用。我正在使用简单的 CDI 注入来获取 @Stateless bean,如下所示:
@Named(value = "helloWorldMessageController")
@RequestScoped
public class HelloWorldMessageController {
@Inject
protected HelloWorldMessageSender sender;
// ....
}
【问题讨论】: