Существует ли "пул сокет-соединений" для приложений Java EE?

Я пишу веб-сервис JAX-RS. Он отвечает на вызовы клиента:

  1. Получение некоторой информации из базы данных
  2. Звонок на внешний сервер

Для 2) сервер не предоставляет интерфейс веб-службы (т.е. нет интерфейса WSDL или REST API). Вместо этого он использует собственный протокол поверх TCPIP. Я хотел бы совершать клиентские вызовы с моего ресурса JAX-RS напрямую на этот сервер, но я не хочу открывать соединение, проверять подлинность и закрывать соединение для каждого вызова с моим ресурсом JAX-RS. Это можно обойти? Другими словами, существует ли что-то вроде "пула соединений сокетов", доступного для приложений Java EE? Должен ли я использовать что-то вроде ESB? Или есть альтернатива, которую я пропускаю?

1 ответ

Решение

"Правильный" способ сделать это - написать JCA-коннектор для вашего внешнего сервера. JCA является частью стека Java EE и предназначен именно для этого: для обеспечения входящей и исходящей связи с сервера приложений на внешнюю систему. Он поддерживает объединение в пул, аутентификацию, транзакцию и т. Д. (База данных и JMS-брокер имеют доступ через коннекторы JCA, кстати).

Однако написание такого адаптера может быть довольно сложным. Может быть, исследовать упрощенный подход, который упрощает использование универсальной библиотеки пула (может быть, вы найдете что-то интересное в commons-pool или c3p0).

Посмотрите также этот ответ о пуле соединений TCP.

Другие вопросы по тегам