Java 在JSF ManagedBean中,我应该在哪里打开/关闭JMS连接?
在一个使用JSF 2和Ajax的简单演示web应用程序中,ManagedBean中有一个从JMS队列接收消息的方法:Java 在JSF ManagedBean中,我应该在哪里打开/关闭JMS连接?,java,jsf,jsf-2,jms,managed-bean,Java,Jsf,Jsf 2,Jms,Managed Bean,在一个使用JSF 2和Ajax的简单演示web应用程序中,ManagedBean中有一个从JMS队列接收消息的方法: @ManagedBean public class Bean { @Resource(mappedName = "jms/HabariConnectionFactory") private ConnectionFactory connectionFactory; @Resource(mappedName = "jms/TOOL.DEFAULT")
@ManagedBean
public class Bean {
@Resource(mappedName = "jms/HabariConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/TOOL.DEFAULT")
private Queue queue;
public String getMessage() {
String result = "no message";
try {
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
Message message = consumer.receiveNoWait();
if (message != null) {
result = ((TextMessage) message).getText();
}
connection.close();
} catch (JMSException ex) {
Logger.getLogger(Bean.class.getName()).log(Level.SEVERE, null, ex);
}
return result;
}
}
每次调用getMessage()方法时,都会打开/关闭JMS连接。为了避免频繁的连接/断开连接操作,我必须在bean生命周期中只打开和关闭一次JMS连接,哪些选项?在servlet上下文侦听器中如何 只需在web.xml中定义
<listener>
<listener-class>contextListenerClass</listener-class>
</listener>
其他解决方案可以是使用SessionListener…首先,将
连接
移动为实例变量,以便可以从open、close和getMessage方法访问它
接下来,使用PostConstruct
注释创建一个openConnection
方法
@PostConstruct
public void openConnection() {
connection = connectionFactory.createConnection();
}
@PreDestroy
public void closeConnection() {
connection.close();
}
最后,使用PreDestroy
注释创建一个closeConnection
方法
@PostConstruct
public void openConnection() {
connection = connectionFactory.createConnection();
}
@PreDestroy
public void closeConnection() {
connection.close();
}