【问题标题】:Where should I open / close JMS connections in a JSF ManagedBean?我应该在哪里打开/关闭 JSF ManagedBean 中的 JMS 连接?
【发布时间】:2011-08-17 17:45:52
【问题描述】:

在一个使用 JSF 2 和 Ajax 的简单演示 Web 应用程序中,ManagedBean 中有一个从 JMS 队列接收消息的方法:

@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 连接,以避免频繁的连接/断开操作?

【问题讨论】:

    标签: java jsf jsf-2 jms managed-bean


    【解决方案1】:

    首先,将您的 Connection 移动为实例变量,以便可以从您的 open、close 和 getMessage 方法访问它。

    接下来,使用PostConstruct 注释创建一个openConnection 方法。

    @PostConstruct
    public void openConnection() {
        connection = connectionFactory.createConnection();
    }
    

    最后,使用PreDestroy 注解创建一个closeConnection 方法。

    @PreDestroy
    public void closeConnection() {
        connection.close();
    }
    

    【讨论】:

      【解决方案2】:

      在 servlet 上下文监听器中怎么样?

      只需在 web.xml 中定义

      <listener>
        <listener-class>contextListenerClass</listener-class>
      </listener>
      

      然后实现一个servletContextListener

      public final class contextListenerClassimplements ServletContextListener {
      ...
      }
      

      其他解决方案可以是使用 SessionListener...

      【讨论】:

        猜你喜欢
        • 2012-10-29
        • 1970-01-01
        • 2011-11-24
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 2011-05-09
        • 2013-12-15
        相关资源
        最近更新 更多