service.data.impl/src/main/resources/META-INF/application-context-service-data.xml

Summary

Maintainability
Test Coverage
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
       http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd">

    <context:mbean-export />

    <cache:annotation-driven cache-manager="cacheManager" />

    <bean id="cacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
          <property name="cacheManager" ref="jCacheManager" />
          <property name="transactionAware" value="true" />
    </bean>

    <bean id="jCacheManager" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
         <property name="cacheManagerUri"   value="classpath:ehcache.xml" />
    </bean>

    <bean id="databasePropertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:database.properties</value>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>

    <bean id="liquibase"
        class="liquibase.integration.spring.SpringLiquibase">
        <property name="dataSource" ref="dataSource" />
        <property name="changeLog" value="classpath:db-changelog.xml" />
        <!-- contexts specifies the runtime contexts to use. <property name="contexts"
            value="test, production" /> -->
    </bean>


    <bean id="CoreEnvironmentBean" class="com.arjuna.ats.arjuna.common.CoreEnvironmentBean">
        <property name="nodeIdentifier" value="nodeIdentifier"/>
    </bean>

    <bean id="CoordinatorEnvironmentBean" class="com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean"/>
    <bean id="JTAEnvironmentBean" class="com.arjuna.ats.jta.common.JTAEnvironmentBean">
        <property name="supportSubtransactions" value="true"/>
    </bean>
    <bean id="RecoveryEnvironmentBean" class="com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean"/>

    <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" value="#{ JTAEnvironmentBean.transactionManager }"/>
        <property name="userTransaction" value="#{ JTAEnvironmentBean.userTransaction }"/>
    </bean>

    <bean id="secretCredentialsManager" class="com.hack23.cia.service.data.impl.util.SecretCredentialsManagerImpl">
        <constructor-arg name="secretName" value="${database.aws.secret.arn}"/>
        <constructor-arg name="secretEnabled" value="${database.aws.secret}"/>
        <constructor-arg name="username" value="${database.username}"/>
        <constructor-arg name="password" value="${database.password}"/>
    </bean>

    <bean id="xADataSource" class="com.hack23.cia.service.data.impl.util.SecretPGXADataSource" depends-on="secretCredentialsManager">
        <constructor-arg index="0" ref="secretCredentialsManager"/>
        <property name="user" value="#{ secretCredentialsManager.username }" />
        <property name="password" value="#{ secretCredentialsManager.password }" />
        <property name="serverName" value="${database.hostname}" />
        <property name="portNumber" value="${database.port}" />
        <property name="databaseName" value="${database.name}" />
        <property name="ssl" value="true" />
        <property name="sslMode" value="verify-full" />
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp2.managed.BasicManagedDataSource" destroy-method="close">
        <property name="XaDataSourceInstance" ref="xADataSource" />
        <property name="transactionManager" value="#{ JTAEnvironmentBean.transactionManager }"/>
        <property name="validationQuery" value="select 1" />
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
        <property name="testOnCreate" value="true"/>
        <property name="initialSize" value="20" />
        <property name="maxTotal" value="200" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
        depends-on="cacheManager,liquibase,transactionManager">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="ciaPersistenceUnit" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="false" />
                <property name="showSql" value="true" />
            </bean>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <!-- <prop key="hibernate.hbm2ddl.auto">${database.ddl}</prop> Do not
                    support materialized views in postgres -->
                <prop key="hibernate.jmx.enabled">true</prop>
                <prop key="hibernate.jmx.usePlatformServer">true</prop>

                <prop key="hibernate.jmx.agentId">cia-statistics</prop>
                <prop key="hibernate.jmx.defaultDomain">org.hibernate.core</prop>
                <prop key="hibernate.jmx.sessionFactoryName">sessionFactory</prop>

                <prop key="hibernate.generate_statistics">true</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.use_sql_comments">false</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.id.new_generator_mappings">true</prop>
                <prop key="hibernate.order_inserts">true</prop>
                <prop key="hibernate.order_updates">true</prop>
                <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
                <prop key="hibernate.bytecode.provider">bytebuddy</prop>
                <prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
                <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
                <prop key="hibernate.connection.isolation">3</prop>
                <prop key="hibernate.connection.release_mode">auto</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
                <prop key="hibernate.enable_lazy_load_no_trans">true</prop>

                <prop key="hibernate.max_fetch_depth">4</prop>
                <prop key="hibernate.batch_fetch_style">dynamic</prop>
                <prop key="hibernate.default_batch_fetch_size">100</prop>                
                <prop key="hibernate.jdbc.fetch_size">100</prop>
                <prop key="hibernate.jdbc.batch_size">30</prop>
                <prop key="hibernate.jdbc.batch_versioned_data">true</prop>
                <prop key="hibernate.jdbc.use_getGeneratedKeys">true</prop>
                <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
                <prop key="hibernate.jdbc.use_scrollable_resultset">true</prop>

                <prop key="hibernate.current_session_context_class">jta</prop>

                <prop key="hibernate.transaction.manager_lookup_class">com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple
                </prop>
                <prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform</prop>

                <prop key="hibernate.physical_naming_strategy">com.hack23.cia.service.data.impl.LegacyNamingStrategy
                </prop>

                <prop key="hibernate.transaction.auto_close_session">false</prop>

                <prop key="hibernate.cache.use_minimal_puts">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_structured_entries">true</prop>

                <prop key="hibernate.cache.default_cache_concurrency_strategy">READ_WRITE</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.jcache.JCacheRegionFactory</prop>
                 <prop key="hibernate.javax.cache.provider">org.ehcache.jsr107.EhcacheCachingProvider</prop>
                <prop key="hibernate.javax.cache.uri">classpath://ehcache.xml</prop>

                <prop key="hibernate.search.automatic_indexing.strategy">none</prop>
                 <prop key="hibernate.search.mapping.configurer">com.hack23.cia.service.data.impl.DataSearchMapping</prop>
                 <prop key="hibernate.search.backend.analysis.configurer">com.hack23.cia.service.data.impl.DataSearchAnalysisConfigurer</prop>
                 <prop key="hibernate.search.backend.lucene_version">8.8.0</prop>

                <prop key="hibernate.search.backend.directory.type">local-filesystem</prop>
                <prop key="hibernate.search.backend.directory.root">${database.search.index.location}</prop>
             </props>
        </property>
    </bean>



    <bean class="org.springframework.jmx.export.MBeanExporter">
        <property name="autodetect" value="false" />
        <property name="assembler">
            <bean id="jmxAssembler"
                class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
                <property name="attributeSource">
                    <bean
                        class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
                </property>
            </bean>
        </property>
        <property name="beans">
            <map>
            </map>
        </property>
        <property name="server">
            <ref bean="mbeanServer" />
        </property>
    </bean>


    <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
        <property name="locateExistingServerIfPossible" value="true" />
    </bean>

    <tx:annotation-driven mode="proxy" transaction-manager="transactionManager" />

    <context:annotation-config />
    <context:spring-configured />
    <context:component-scan base-package="com.hack23.cia.service.data" />

</beans>