我有一个关于何时关闭在无状态会话 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();
}
}
}
如您所见,我目前有一个单独的 close 方法,应该在发送事件后由使用 bean 的类调用。这是合法的,还是自找麻烦?我对 EJB 缺乏经验,并且愿意接受任何建议。使用@EJB 注释将bean 注入到调用类中。