У меня есть компонент EJB3, который должен GET или POST с нескольких HTTP-серверов. Я прочитал документацию по написанию адаптеров JCA, а также документацию по Apache HTTPComponents, в частности управляемые соединения, управляемые фабрики подключений и т. Д., Которые предлагает HTTPClient.Как использовать HTTPClient изнутри EJB в TomEE
Отметьте, что в документации для BasicHttpClientConnectionManager указано, что оно используется, а не PoolingHttpClientConnectionManager «Внутри контейнера EJB». Неясно, относится ли «внутри контейнера EJB» к пользовательскому коду в EJB для запуска в контейнере или к собственному коду реализации контейнера (например, что-то, что вы могли бы поместить в адаптер JCA.
Я . еще немного непонятно, архитектурно, как справиться с задачей взять максимальное преимущество Servics предлагаемого контейнера до сих пор мой выбор кажется:
Изнутри EJB, создать новый BasicHttpClientConnectionManager, а затем создать клиент, например:
BasicHttpClientConnectionManager cxMgr = new BasicHttpClientConnectionManager() HttpClients.custom().setConnectionManager(cxMgr).build()
Это, я считаю, приведет к объединению пулов соединений, а скорее к пулу экземпляров EJB, который, вероятно, не будет таким, поскольку он не знает, какой экземпляр компонента содержит активное соединение с которым удаленный HTTP-сервер ,
Написать (довольно минимальный) JCA адаптер, который облегает PoolingHttpClientConnectionManager, а затем, в EJB, возьмите этот адаптер с @Resource аннотацией и использовать его, чтобы построить HTTPClient
Написать адаптер JCA, что управляет пулом HTTPClients и передает их, когда это необходимо.
Я неясно на какой подход следует принять, или я или нет, я не обращая внимания какой-то службы управления HTTP Connection, который уже встроен в контейнер (в данном случае, TomEE плюс). Как мне это сделать?
Я использовал PoolingHttpClientConnectionManager непосредственно в EJB (без адаптера JCA), но это был Singleton (мы используем ejb-3.1) и имеет довольно фиксированное количество подключений –