Я хочу использовать JMS (Topic) в моем проекте JavaEE 6. У меня есть один класс, который действует как издатель и подписчик темы одновременно. В следующем коде показаны наиболее важные части класса.
public class MessageHandler implements MessageListener {
private static TopicConnectionFactory factory;
private static Topic topic;
private TopicSubscriber subscriber;
private TopicPublisher publisher;
public MessageHandler() throws NamingException, JMSException {
if (factory == null) {
Context context = new InitialContext();
factory = (TopicConnectionFactory) new InitialContext()
.lookup("jms/myfactory");
topic = (Topic) context.lookup("jms/mytopic");
}
TopicConnection connection = factory.createTopicConnection();
connection.start();
TopicSession session = connection
.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
subscriber = session.createSubscriber(topic);
}
@Override
public void onMessage(Message message) {
try {
ObjectMessage msg = (ObjectMessage) message;
Object someO= msg.getObject();
System.out.println(this + " receives "+someO);
} catch (JMSException e) {
e.printStackTrace();
}
}
public void sendMessage(Object someO) {
try {
ObjectMessage msg = session.createObjectMessage();
msg.setObject(someO);
publisher = session.createPublisher(topic);
publisher.publish(msg);
publisher.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
Мой вопрос: хороший ли это способ создать такой класс? Моя идея заключалась в том, чтобы поделиться одним подключением и сеансом как для подписки, так и для публикации. Но я боюсь, что это может привести к накладным расходам или блокировке, потому что я не закрываю соединение, сеанс, подписчика и издателя, пока объект больше не понадобится. Все примеры, которые я нашел в Интернете, закрывают все сразу после отправки или получения сообщения ...
Заранее спасибо!