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

org.apereo.cas.config.JpaTicketRegistryConfiguration Maven / Gradle / Ivy

package org.apereo.cas.config;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;

/**
 * This this {@link JpaTicketRegistryConfiguration}.
 *
 * @author Misagh Moayyed
 * @since 5.0.0
 */
@Configuration("jpaTicketRegistryConfiguration")
public class JpaTicketRegistryConfiguration {
    
    @Value("${database.show.sql:true}")
    private boolean showSql;
    
    @Value("${database.gen.ddl:true}")
    private boolean generateDdl;
    
    @Value("${ticketreg.database.dialect:org.hibernate.dialect.HSQLDialect}")
    private String hibernateDialect;
    
    @Value("${ticketreg.database.ddl.auto:create-drop}")
    private String hibernateHbm2DdlAuto;
    
    @Value("${ticketreg.database.batchSize:1}")
    private String hibernateBatchSize;
    
    @Value("${ticketreg.database.driverClass:org.hsqldb.jdbcDriver}")
    private String driverClass;
    
    @Value("${ticketreg.database.url:jdbc:hsqldb:mem:cas-service-registry}")
    private String jdbcUrl;
    
    @Value("${ticketreg.database.user:sa}")
    private String user;
    
    @Value("${ticketreg.database.password:}")
    private String password;
    
    @Value("${ticketreg.database.pool.minSize:6}")
    private int initialPoolSize;
    
    @Value("${ticketreg.database.pool.maxSize:18}")
    private int maxPoolSize;
    
    @Value("${ticketreg.database.pool.maxIdleTime:1000}")
    private int maxIdleTimeExcessConnections;

    @Value("${ticketreg.database.pool.maxWait:2000}")
    private int checkoutTimeout;

    @Value("${ticketreg.database.idle.timeout:5000}")
    private int idleTimeout;

    @Value("${ticketreg.database.leak.threshold:10}")
    private int leakDetectionThreshold;

    @Value("${ticketreg.database.fail.fast:true}")
    private boolean failFast;

    @Value("${ticketreg.database.isolate.internal.queries:false}")
    private boolean isolateInternalQueries;

    @Value("${ticketreg.database.health.query:SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS}")
    private String healthCheckQuery;

    @Value("${ticketreg.database.pool.suspension:false}")
    private boolean allowPoolSuspension;

    @Value("${ticketreg.database.autocommit:false}")
    private boolean autoCommit;
        
    /**
     * Jpa vendor adapter hibernate jpa vendor adapter.
     *
     * @return the hibernate jpa vendor adapter
     */
    @Bean(name = "ticketJpaVendorAdapter")
    public HibernateJpaVendorAdapter ticketJpaVendorAdapter() {
        final HibernateJpaVendorAdapter jpaEventVendorAdapter = new HibernateJpaVendorAdapter();
        jpaEventVendorAdapter.setGenerateDdl(this.generateDdl);
        jpaEventVendorAdapter.setShowSql(this.showSql);
        return jpaEventVendorAdapter;
    }

    /**
     * Jpa packages to scan string [].
     *
     * @return the string [ ]
     */
    @Bean(name = "ticketPackagesToScan")
    public String[] ticketPackagesToScan() {
        return new String[] {
                "org.apereo.cas.ticket", 
                "org.apereo.cas.adaptors.jdbc"
        };
    }

    /**
     * Entity manager factory local container.
     *
     * @return the local container entity manager factory bean
     */
    @Bean(name = "ticketEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean ticketEntityManagerFactory() {
        final LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();

        bean.setJpaVendorAdapter(ticketJpaVendorAdapter());
        bean.setPersistenceUnitName("jpaTicketRegistryContext");
        bean.setPackagesToScan(ticketPackagesToScan());
        bean.setDataSource(dataSourceTicket());
        final Properties properties = new Properties();
        properties.put("hibernate.dialect", this.hibernateDialect);
        properties.put("hibernate.hbm2ddl.auto", this.hibernateHbm2DdlAuto);
        properties.put("hibernate.jdbc.batch_size", this.hibernateBatchSize);
        bean.setJpaProperties(properties);
        return bean;
    }

    /**
     * Transaction manager events jpa transaction manager.
     *
     * @param emf the emf
     * @return the jpa transaction manager
     */
    @Bean(name = "ticketTransactionManager")
    public JpaTransactionManager ticketTransactionManager(@Qualifier("ticketEntityManagerFactory") 
                                                          final EntityManagerFactory emf) {
        final JpaTransactionManager mgmr = new JpaTransactionManager();
        mgmr.setEntityManagerFactory(emf);
        return mgmr;
    }

    /**
     * Data source ticket combo pooled data source.
     *
     * @return the combo pooled data source
     */
    @RefreshScope
    @Bean(name = "dataSourceTicket")
    public DataSource dataSourceTicket() {
        try {
            final HikariDataSource bean = new HikariDataSource();
            bean.setDriverClassName(this.driverClass);
            bean.setJdbcUrl(this.jdbcUrl);
            bean.setUsername(this.user);
            bean.setPassword(this.password);

            bean.setMaximumPoolSize(this.maxPoolSize);
            bean.setMinimumIdle(this.maxIdleTimeExcessConnections);
            bean.setIdleTimeout(this.idleTimeout);
            bean.setLeakDetectionThreshold(this.leakDetectionThreshold);
            bean.setInitializationFailFast(this.failFast);
            bean.setIsolateInternalQueries(this.isolateInternalQueries);
            bean.setConnectionTestQuery(this.healthCheckQuery);
            bean.setAllowPoolSuspension(this.allowPoolSuspension);
            bean.setAutoCommit(this.autoCommit);
            bean.setLoginTimeout(this.checkoutTimeout);
            bean.setValidationTimeout(this.checkoutTimeout);
            return bean;
        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy