/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.search.solr.internal.http;
import com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil;
import com.liferay.portal.search.solr.configuration.SolrHttpClientFactoryConfiguration;
import com.liferay.portal.search.solr.http.HttpClientFactory;
import com.liferay.portal.search.solr.http.SSLSocketFactoryBuilder;
import java.util.Map;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ReferencePolicyOption;
/**
* @author László Csontos
* @author André de Oliveira
*/
@Component(
configurationPid = "com.liferay.portal.search.solr.configuration.SolrHttpClientFactoryConfiguration",
immediate = true, property = {"type=CERT"},
service = HttpClientFactory.class
)
public class CertAuthPoolingHttpClientFactory
extends BasePoolingHttpClientFactory {
@Activate
@Modified
protected void activate(Map<String, Object> properties) {
_solrHttpClientFactoryConfiguration =
ConfigurableUtil.createConfigurable(
SolrHttpClientFactoryConfiguration.class, properties);
int defaultMaxConnectionsPerRoute =
_solrHttpClientFactoryConfiguration.defaultMaxConnectionsPerRoute();
setDefaultMaxConnectionsPerRoute(defaultMaxConnectionsPerRoute);
int maxTotalConnections =
_solrHttpClientFactoryConfiguration.maxTotalConnections();
setMaxTotalConnections(maxTotalConnections);
}
@Override
protected void configure(HttpClientBuilder httpClientBuilder) {
}
@Override
protected PoolingHttpClientConnectionManager
createPoolingHttpClientConnectionManager() throws Exception {
SSLConnectionSocketFactory sslConnectionSocketFactory =
_sslSocketFactoryBuilder.build();
Registry<ConnectionSocketFactory> schemeRegistry = createSchemeRegistry(
sslConnectionSocketFactory);
return new PoolingHttpClientConnectionManager(schemeRegistry);
}
protected Registry<ConnectionSocketFactory> createSchemeRegistry(
SSLConnectionSocketFactory sslConnectionSocketFactory) {
RegistryBuilder<ConnectionSocketFactory> registryBuilder =
RegistryBuilder.create();
registryBuilder.register("https", sslConnectionSocketFactory);
return registryBuilder.build();
}
@Deactivate
protected void deactivate() {
shutdown();
}
@Reference(
cardinality = ReferenceCardinality.AT_LEAST_ONE,
policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY
)
protected void setHttpRequestInterceptor(
HttpRequestInterceptor httpRequestInterceptor) {
addHttpRequestInterceptor(httpRequestInterceptor);
}
@Reference(unbind = "-")
protected void setSslSocketFactoryBuilder(
SSLSocketFactoryBuilder sslSocketFactoryBuilder) {
_sslSocketFactoryBuilder = sslSocketFactoryBuilder;
}
protected void unsetHttpRequestInterceptor(
HttpRequestInterceptor httpRequestInterceptor) {
removeHttpRequestInterceptor(httpRequestInterceptor);
}
private volatile SolrHttpClientFactoryConfiguration
_solrHttpClientFactoryConfiguration;
private SSLSocketFactoryBuilder _sslSocketFactoryBuilder;
}