All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nimbusds.infinispan.persistence.sql.config.SQLStoreConfiguration Maven / Gradle / Ivy

package com.nimbusds.infinispan.persistence.sql.config;


import java.util.Properties;

import com.nimbusds.common.config.LoggableConfiguration;
import com.nimbusds.infinispan.persistence.sql.Loggers;
import com.nimbusds.infinispan.persistence.sql.SQLRecordTransformer;
import com.nimbusds.infinispan.persistence.sql.SQLStore;
import net.jcip.annotations.Immutable;
import org.apache.commons.lang3.StringUtils;
import org.infinispan.commons.configuration.BuiltBy;
import org.infinispan.commons.configuration.ConfigurationFor;
import org.infinispan.commons.configuration.attributes.Attribute;
import org.infinispan.commons.configuration.attributes.AttributeDefinition;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.commons.util.StringPropertyReplacer;
import org.infinispan.configuration.cache.AbstractStoreConfiguration;
import org.infinispan.configuration.cache.AsyncStoreConfiguration;
import org.infinispan.configuration.cache.SingletonStoreConfiguration;
import org.jooq.SQLDialect;


/**
 * SQL store configuration.
 * 
 * 

Example XML configuration: * *

 * <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 * 	          xsi:schemaLocation="urn:infinispan:config:8.2 http://www.infinispan.org/schemas/infinispan-config-8.2.xsd"
 * 	          xmlns="urn:infinispan:config:8.2"
 * 	          xmlns:sql="urn:infinispan:config:store:sql:2.2">
 * 	
 * 	<cache-container name="myCacheContainer" default-cache="myMap" statistics="true">
 * 		<jmx duplicate-domains="true"/>
 * 		<local-cache name="myMap">
 * 			<eviction type="COUNT" size="100"/>
 * 			<persistence passivation="false">
 * 				<sql-store xmlns="urn:infinispan:config:store:sql:2.2"
 * 			      		      shared="true"
 * 			      		      record-transformer="com.nimbusds.infinispan.persistence.sql.UserRecordTransformer"
 * 			      		      sql-dialect="H2"
 * 			      		      create-table-if-missing="true">
 *
 * 				<property name="jdbcUrl">jdbc:h2:mem:test;DATABASE_TO_UPPER=false</property>
 * 				<property name="username">admin</property>
 * 				<property name="password">secret</property>
 *
 * 				</sql-store>
 * 			</persistence>
 * 		</local-cache>
 * 	</cache-container>
 * 	
 * </infinispan>
 * 
*/ @Immutable @BuiltBy(SQLStoreConfigurationBuilder.class) @ConfigurationFor(SQLStore.class) public class SQLStoreConfiguration extends AbstractStoreConfiguration implements LoggableConfiguration { /** * The attribute definition for the record transformer class. */ static final AttributeDefinition RECORD_TRANSFORMER = AttributeDefinition.builder("recordTransformer", null, Class.class).build(); /** * The attribute definition for the query executor class. */ static final AttributeDefinition QUERY_EXECUTOR = AttributeDefinition.builder("queryExecutor", null, Class.class).build(); /** * The attribute definition for the SQL dialect. */ static final AttributeDefinition SQL_DIALECT = AttributeDefinition.builder("sqlDialect", SQLDialect.DEFAULT).build(); /** * The attribute definition for the optional create table if missing * setting. */ static final AttributeDefinition CREATE_TABLE_IF_MISSING = AttributeDefinition.builder("createTableIfMissing", Boolean.TRUE).build(); /** * Returns the attribute definitions for the SQL store configuration. * * @return The attribute definitions. */ public static AttributeSet attributeDefinitionSet() { return new AttributeSet(SQLStoreConfiguration.class, AbstractStoreConfiguration.attributeDefinitionSet(), RECORD_TRANSFORMER, QUERY_EXECUTOR, SQL_DIALECT, CREATE_TABLE_IF_MISSING); } /** * The class for transforming between Infinispan entries (key / value * pair and optional metadata) and a corresponding SQL record. * *

See {@link SQLRecordTransformer}. */ private final Attribute recordTransformerClass; /** * The optional class for executing direct SQL queries against the * database. * *

See {@link com.nimbusds.infinispan.persistence.common.query.QueryExecutor} */ private final Attribute queryExecutorClass; /** * The configured SQL dialect. */ private final Attribute sqlDialect; /** * The configured optional create table if missing setting. */ private final Attribute createTableIfMissing; /** * Creates a new SQL store configuration. * * @param attributes The configuration attributes. Must not be * {@code null}. * @param asyncConfig Configuration for the async cache * loader. * @param singletonStoreConfig Configuration for a singleton store. */ public SQLStoreConfiguration(final AttributeSet attributes, final AsyncStoreConfiguration asyncConfig, final SingletonStoreConfiguration singletonStoreConfig) { super(attributes, asyncConfig, singletonStoreConfig); recordTransformerClass = attributes.attribute(RECORD_TRANSFORMER); assert recordTransformerClass != null; queryExecutorClass = attributes.attribute(QUERY_EXECUTOR); sqlDialect = attributes.attribute(SQL_DIALECT); assert sqlDialect != null; createTableIfMissing = attributes.attribute(CREATE_TABLE_IF_MISSING); } /** * Returns the class for transforming between Infinispan entries (key / * value pairs and optional metadata) and a corresponding SQL record. * *

See {@link SQLRecordTransformer}. * * @return The record transformer class. */ public Class getRecordTransformerClass() { return recordTransformerClass.get(); } /** * Returns the optional class for executing direct SQL queries against * the database. * *

See {@link com.nimbusds.infinispan.persistence.common.query.QueryExecutor} * * @return The query executor class, {@code null} if not specified. */ public Class getQueryExecutorClass() { return queryExecutorClass.get(); } /** * Returns the configured SQL dialect. * * @return The SQL dialect. */ public SQLDialect getSQLDialect() { return sqlDialect.get(); } /** * Returns the configured create table if missing setting. * * @return {@code true} to create the underlying table(s) if missing, * {@code false} to skip this check. */ public boolean createTableIfMissing() { return createTableIfMissing.get(); } @Override public Properties properties() { // Interpolate with system properties where ${sysPropName} is found Properties interpolatedProps = new Properties(); for (String name: super.properties().stringPropertyNames()) { interpolatedProps.setProperty(name, StringPropertyReplacer.replaceProperties(super.properties().getProperty(name))); } return interpolatedProps; } @Override public void log() { Loggers.MAIN_LOG.info("[IS0000] Infinispan SQL store: Record transformer class: {} ", getRecordTransformerClass().getCanonicalName()); Loggers.MAIN_LOG.info("[IS0001] Infinispan SQL store: Query executor class: {} ", getQueryExecutorClass() != null ? getQueryExecutorClass().getCanonicalName() : "not specified"); Loggers.MAIN_LOG.info("[IS0002] Infinispan SQL store: SQL dialect: {} ", sqlDialect); Loggers.MAIN_LOG.info("[IS0004] Infinispan SQL store: Create table if missing: {} ", createTableIfMissing); if (StringUtils.isNotBlank(properties().getProperty("dataSourceClassName"))) { Loggers.MAIN_LOG.info("[IS0005] Infinispan SQL store: Data source class name: {} ", properties().getProperty("dataSourceClassName")); } if (StringUtils.isNotBlank(properties().getProperty("dataSource.url"))) { Loggers.MAIN_LOG.info("[IS0006] Infinispan SQL store: Data source URL: {} ", properties().getProperty("dataSource.url")); } // Old style JDBC URL config if (StringUtils.isNotBlank(properties().getProperty("jdbcUrl"))) { Loggers.MAIN_LOG.info("[IS0003] Infinispan SQL store: JDBC URL: {} ", properties().getProperty("jdbcUrl")); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy