4

JSF 2 と Ajax を使用する単純なデモ Web アプリでは、JMS キューからメッセージを受信する ManagedBean にメソッドがあります。

@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 接続を開いたり閉じたりするには、どのオプションが必要ですか?

4

2 に答える 2

2

まず、 open、close、およびメソッド Connectionからアクセスできるように、インスタンス変数に移動します。getMessage

次に、アノテーションを使用してopenConnectionメソッドを作成します。PostConstruct

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

最後に、アノテーションを使用してcloseConnectionメソッドを作成します。PreDestroy

@PreDestroy
public void closeConnection() {
    connection.close();
}
于 2011-06-10T04:24:15.487 に答える
0

サーブレットコンテキストリスナーではどうですか?

web.xmlで定義するだけです

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

そして、servletContextListenerを実装します

public final class contextListenerClassimplements ServletContextListener {
...
}

他の解決策は、SessionListenerを使用することです...

于 2011-05-04T14:24:47.127 に答える