Безопасен ли поток JAX-RS (RESTEasy) ClientBuilder? - PullRequest
0 голосов
/ 06 апреля 2020

Помимо final Client client = ClientBuilder.newClient(); также возможно

    final ClientBuilder builder = ClientBuilder.newBuilder();
    final Client client = builder.build();

, чтобы получить экземпляр Client. В чем преимущество последнего?

Мне просто интересно: возможно ли использовать ClientBuilder для одновременного построения Client экземпляров и, в частности, использовать экземпляры Client, построенные таким образом одновременно?

Я не смог найти четкого утверждения по этому поводу, просто следующее из документации RESTEasy:

Одним из решений по умолчанию, принятых HttpClient и принятых Resteasy, является использование org. apache .http.impl.conn.SingleClientConnManager, который управляет одним сокетом в любой момент времени и который поддерживает вариант использования, в котором один или несколько вызовов выполняются последовательно из одного потока. Для многопоточных приложений SingleClientConnManager можно заменить на org. apache .http.impl.conn.tsccm.ThreadSafeClientConnManager:

ClientConnectionManager cm = new ThreadSafeClientConnManager();
HttpClient httpClient = new DefaultHttpClient(cm);
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient);

Похоже, что экземпляры RESTEasy Client по умолчанию не безопасны для потоков .

Относительно ClientBuilder, глядя на ResteasyClientBuilderImpl. java:

ClientHttpEngine engine = httpEngine != null ? httpEngine : new ClientHttpEngineBuilder43().resteasyClientBuilder(this).build();
if (resetProxy) {
   this.defaultProxy = null;
}
return createResteasyClient(engine, executor, cleanupExecutor, scheduledExecutorService, config);

это похоже на каждый Client экземпляр, созданный тем же ClientBuilder использует тот же ClientHttpEngine, используя SingleClientConnManager, таким образом, используя то же соединение.

Если вышеприведенное верно, то я бы сказал, что один и тот же экземпляр ClientBuilder небезопасен для одновременного использования - если только настроен на использование ThreadSafeClientConnManager.

...