Определите "поделиться" .
Если вы хотите поделиться между различными потоками , это очень опасно.Вы можете безопасно поделиться объектом QueueConnectionFactory, а также объектом JMS-соединения.Вы не должны предоставлять общий доступ к объектам Session, Sender / Consumer или Message.Вот как работает TIBCO EMS. Я не уверен насчет платформы IBM, но думаю, что она очень похожа.
Если вы можете быть уверены, что ваш метод send не вызывается из разных потоков Вы можете инкапсулировать это в класс MySender с помощью переменных-членов Connection, Session и Sender.Но будь осторожен!Правильно закройте ресурсы при выходе.Вот что рекомендует Хайко Рупп.Что-то вроде этого:
class MySender {
private QueueConnection connection = null;
private QueueSession session = null;
private QueueSender sender = null;
public MySender(...) { /* initialize conn/sess/sender */ }
public send(String xmlMsg) { /* sender.send(session.createTextMessage(xmlMsg)) */ }
public close() { /* close all resources */ }
}
Относительно производительности.В стандарте JMS нет места для улучшения.Держите сообщения небольшими и оптимизируйте настройки сервера.Используйте долгосрочные пункты назначения только тогда, когда вам это нужно и т. Д. Прочитайте документацию для вашей платформы.Но на стороне клиента не так много места.На некоторых платформах JMS предлагает дополнительные функции, которые позволяют повысить производительность (пакетные отправки и т. Д.), Но это зависит от платформы.Я не знаю IBM.