package org.infinispan.client.hotrod.impl; import java.util.Objects; import java.util.Properties; import java.util.regex.Pattern; import org.infinispan.client.hotrod.ProtocolVersion; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory; import org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy; import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory; import org.infinispan.commons.marshall.jboss.GenericJBossMarshaller; /** * Encapsulate all config properties here * * @author Manik Surtani * @version 4.1 */ public class ConfigurationProperties { public static final String TRANSPORT_FACTORY = "infinispan.client.hotrod.transport_factory"; public static final String SERVER_LIST = "infinispan.client.hotrod.server_list"; public static final String MARSHALLER = "infinispan.client.hotrod.marshaller"; public static final String ASYNC_EXECUTOR_FACTORY = "infinispan.client.hotrod.async_executor_factory"; public static final String CLIENT_INTELLIGENCE = "infinispan.client.hotrod.client_intelligence"; public static final String DEFAULT_EXECUTOR_FACTORY_POOL_SIZE = "infinispan.client.hotrod.default_executor_factory.pool_size"; public static final String TCP_NO_DELAY = "infinispan.client.hotrod.tcp_no_delay"; public static final String TCP_KEEP_ALIVE = "infinispan.client.hotrod.tcp_keep_alive"; @Deprecated public static final String PING_ON_STARTUP = "infinispan.client.hotrod.ping_on_startup"; public static final String REQUEST_BALANCING_STRATEGY = "infinispan.client.hotrod.request_balancing_strategy"; public static final String KEY_SIZE_ESTIMATE = "infinispan.client.hotrod.key_size_estimate"; public static final String VALUE_SIZE_ESTIMATE = "infinispan.client.hotrod.value_size_estimate"; public static final String FORCE_RETURN_VALUES = "infinispan.client.hotrod.force_return_values"; public static final String HASH_FUNCTION_PREFIX = "infinispan.client.hotrod.hash_function_impl"; public static final String DEFAULT_EXECUTOR_FACTORY_QUEUE_SIZE = "infinispan.client.hotrod.default_executor_factory.queue_size"; public static final String SO_TIMEOUT = "infinispan.client.hotrod.socket_timeout"; public static final String CONNECT_TIMEOUT = "infinispan.client.hotrod.connect_timeout"; public static final String PROTOCOL_VERSION = "infinispan.client.hotrod.protocol_version"; public static final String USE_SSL = "infinispan.client.hotrod.use_ssl"; public static final String KEY_STORE_FILE_NAME = "infinispan.client.hotrod.key_store_file_name"; public static final String KEY_STORE_TYPE = "infinispan.client.hotrod.key_store_type"; public static final String KEY_STORE_PASSWORD = "infinispan.client.hotrod.key_store_password"; public static final String SNI_HOST_NAME = "infinispan.client.hotrod.sni_host_name"; public static final String KEY_ALIAS = "infinispan.client.hotrod.key_alias"; public static final String KEY_STORE_CERTIFICATE_PASSWORD = "infinispan.client.hotrod.key_store_certificate_password"; public static final String TRUST_STORE_FILE_NAME = "infinispan.client.hotrod.trust_store_file_name"; public static final String TRUST_STORE_TYPE = "infinispan.client.hotrod.trust_store_type"; public static final String TRUST_STORE_PASSWORD = "infinispan.client.hotrod.trust_store_password"; public static final String SSL_PROTOCOL = "infinispan.client.hotrod.ssl_protocol"; public static final String SSL_CONTEXT = "infinispan.client.hotrod.ssl_context"; public static final String MAX_RETRIES = "infinispan.client.hotrod.max_retries"; public static final String USE_AUTH = "infinispan.client.hotrod.use_auth"; public static final String SASL_MECHANISM = "infinispan.client.hotrod.sasl_mechanism"; public static final String AUTH_CALLBACK_HANDLER = "infinispan.client.hotrod.auth_callback_handler"; public static final String AUTH_SERVER_NAME = "infinispan.client.hotrod.auth_server_name"; public static final String AUTH_USERNAME = "infinispan.client.hotrod.auth_username"; public static final String AUTH_PASSWORD = "infinispan.client.hotrod.auth_password"; public static final String AUTH_REALM = "infinispan.client.hotrod.auth_realm"; public static final String AUTH_CLIENT_SUBJECT = "infinispan.client.hotrod.auth_client_subject"; public static final String SASL_PROPERTIES_PREFIX = "infinispan.client.hotrod.sasl_properties"; public static final Pattern SASL_PROPERTIES_PREFIX_REGEX = Pattern.compile('^' + ConfigurationProperties.SASL_PROPERTIES_PREFIX + '.'); // defaults public static final int DEFAULT_KEY_SIZE = 64; public static final int DEFAULT_VALUE_SIZE = 512; public static final int DEFAULT_HOTROD_PORT = 11222; public static final int DEFAULT_SO_TIMEOUT = 60000; public static final int DEFAULT_CONNECT_TIMEOUT = 60000; public static final int DEFAULT_MAX_RETRIES = 10; private final TypedProperties props; public ConfigurationProperties() { this.props = new TypedProperties(); } public ConfigurationProperties(String serverList) { this(); props.setProperty(SERVER_LIST, serverList); } public ConfigurationProperties(Properties props) { this.props = props == null ? new TypedProperties() : TypedProperties.toTypedProperties(props); } public String getTransportFactory() { return props.getProperty(TRANSPORT_FACTORY, TcpTransportFactory.class.getName()); } public String getMarshaller() { return props.getProperty(MARSHALLER, GenericJBossMarshaller.class.getName()); } public String getAsyncExecutorFactory() { return props.getProperty(ASYNC_EXECUTOR_FACTORY, DefaultAsyncExecutorFactory.class.getName()); } public int getDefaultExecutorFactoryPoolSize() { return props.getIntProperty(DEFAULT_EXECUTOR_FACTORY_POOL_SIZE, 99); } public int getDefaultExecutorFactoryQueueSize() { return props.getIntProperty(DEFAULT_EXECUTOR_FACTORY_QUEUE_SIZE, 10000); } public boolean getTcpNoDelay() { return props.getBooleanProperty(TCP_NO_DELAY, true); } public boolean getTcpKeepAlive() { return props.getBooleanProperty(TCP_KEEP_ALIVE, false); } public String getRequestBalancingStrategy() { return props.getProperty(REQUEST_BALANCING_STRATEGY, RoundRobinBalancingStrategy.class.getName()); } public int getKeySizeEstimate() { return props.getIntProperty(KEY_SIZE_ESTIMATE, DEFAULT_KEY_SIZE); } public int getValueSizeEstimate() { return props.getIntProperty(VALUE_SIZE_ESTIMATE, DEFAULT_VALUE_SIZE); } public boolean getForceReturnValues() { return props.getBooleanProperty(FORCE_RETURN_VALUES, false); } public Properties getProperties() { return props; } public int getSoTimeout() { return props.getIntProperty(SO_TIMEOUT, DEFAULT_SO_TIMEOUT); } public String getProtocolVersion() { return props.getProperty(PROTOCOL_VERSION, ProtocolVersion.DEFAULT_PROTOCOL_VERSION.toString()); } public int getConnectTimeout() { return props.getIntProperty(CONNECT_TIMEOUT, DEFAULT_CONNECT_TIMEOUT); } public boolean getUseSSL() { return props.getBooleanProperty(USE_SSL, false); } public String getKeyStoreFileName() { return props.getProperty(KEY_STORE_FILE_NAME, null); } public String getKeyStoreType() { return props.getProperty(KEY_STORE_TYPE, null); } public String getKeyStorePassword() { return props.getProperty(KEY_STORE_PASSWORD, null); } public String getKeyAlias() { return props.getProperty(KEY_ALIAS, null); } public String getTrustStoreFileName() { return props.getProperty(TRUST_STORE_FILE_NAME, null); } public String getTrustStoreType() { return props.getProperty(TRUST_STORE_TYPE, null); } public String getTrustStorePassword() { return props.getProperty(TRUST_STORE_PASSWORD, null); } public String getSSLProtocol() { return props.getProperty(SSL_PROTOCOL, null); } public int getMaxRetries() { return props.getIntProperty(MAX_RETRIES, DEFAULT_MAX_RETRIES); } /** * Is version previous to, and not including, 1.2? */ public static boolean isVersionPre12(Configuration cfg) { String version = cfg.version().toString(); return Objects.equals(version, "1.0") || Objects.equals(version, "1.1"); } }