ステートレス セッション Bean (EJB) 内で作成された接続をいつ閉じるかについて、一般的な質問があります。接続は ActiveMQ へのものであり、Bean のコンストラクター内で作成されます。その後、接続はメソッド内で使用されます。この接続を閉じる適切な時間/場所はいつなのか疑問に思っています。
Bean を使用するクラスによって呼び出される必要がある、接続を閉じるための別のメソッドを持つことは適切でしょうか? または、それを使用するメソッド内で接続を閉じる必要がありますか? コンストラクターで接続が開かれているため、接続を閉じてから、現在閉じている接続でその Bean を再利用するのではないかと心配しています。ここにいくつかのコードがあります:
@Stateless
@LocalBean
public class SendEventsBean {
private static String brokerURL = ".......";
private static transient ConnectionFactory factory;
private transient Connection connection;
private transient Session session;
private transient MessageProducer producer;
public SendEventsBean() {
factory = new ActiveMQConnectionFactory(brokerURL);
try {
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
producer = session.createProducer(null);
} catch (JMSException e) {
e.printStackTrace();
}
}
public void sendEvent(String id, String description, String area) {
Destination destination;
try {
destination = session.createQueue("FWT." + "events");
TextMessage message = session.createTextMessage(id + " " + description + " " + area);
producer.send(destination, message);
} catch (JMSException e) {
e.printStackTrace();
}
}
public void close() throws JMSException {
if (connection != null) {
connection.close();
}
}
}
ご覧のとおり、現在、イベントの送信後に Bean を使用してクラスによって呼び出される別の close メソッドがあります。これは合法ですか、それともトラブルを求めていますか? 私は EJB の経験がなく、どんな提案も歓迎します。Bean は、@EJB アノテーションを使用して呼び出しクラスに注入されます。