Apache Syncope в Tomcat не может загрузить драйвер базы данных - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь настроить Apache Syncope 8.0.14, выполнив следующие действия: https://syncope.apache.org/docs/2.0/getting-started.html

Мне удалось использовать установщик графического интерфейса для успешной установки и компиляции проекта Syncope Maven.

Моя средаиспользует:

  • Ubuntu 18.04
  • Mysql (версия 14.14 Distrib 5.7.27, для Linux (x86_64) с использованием оболочки EditLine)
  • Apache Tomcat 8.5.46
  • Java 8 (сборка 1.8.0_181-b13)

Сборка maven успешна, и создаются файлы war для syncope, syncope-console и syncope-enduser.

Тем не менее, при развертывании военных файлов на Tomcat, Syncope не может запуститься. Ниже приведены журналы ошибок из журналов локального хоста tomcat:

02-Oct-2019 10:07:54.789 SEVERE [http-nio-8080-exec-6] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MasterEntityManagerFactory' defined in URL [jar:file:/proj/apache-tomcat/webapps/syncope/WEB-INF/lib/syncope-core-persistence-jpa-2.0.14.jar!/domains/MasterDomain.xml]: Cannot resolve reference to bean 'MasterDataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MasterDataSource' defined in URL [jar:file:/proj/apache-tomcat/webapps/syncope/WEB-INF/lib/syncope-core-persistence-jpa-2.0.14.jar!/domains/MasterDomain.xml]: Cannot resolve reference to bean 'localMasterDataSource' while setting bean property 'defaultObject'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'localMasterDataSource' defined in URL [jar:file:/proj/apache-tomcat/webapps/syncope/WEB-INF/lib/syncope-core-persistence-jpa-2.0.14.jar!/domains/MasterDomain.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.RuntimeException: Failed to load driver class org.h2.Driver in either of HikariConfig class loader or Thread context classloader
Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MasterDataSource' defined in URL [jar:file:/proj/apache-tomcat/webapps/syncope/WEB-INF/lib/syncope-core-persistence-jpa-2.0.14.jar!/domains/MasterDomain.xml]: Cannot resolve reference to bean 'localMasterDataSource' while setting bean property 'defaultObject'; nested exception is org.springframework.beans.factory.Bean
CreationException: Error creating bean with name 'localMasterDataSource' defined in URL [jar:file:/proj/apache-tomcat/webapps/syncope/WEB-INF/lib/syncope-core-persistence-jpa-2.0.14.jar!/domains/MasterDomain.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.RuntimeException: Failed to load driver class org.h2.Driver in either of HikariConfig class loader or Thread context classloader
            at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
            at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1533)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1280)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
            at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1082)

Master.properties содержит:

Master.driverClassName=com.mysql.jdbc.Driver
Master.url=jdbc:mysql://10.1.153.100:3306/syncope?characterEncoding=UTF-8&relaxAutoCommit=true&relaxAutoCommit=true
Master.schema=
Master.username=syncope
Master.password=syncope
Master.databasePlatform=org.apache.openjpa.jdbc.sql.MySQLDictionary(blobTypeName=LONGBLOB)
Master.orm=META-INF/spring-orm.xml
Master.pool.validationQuery=SELECT 1
Master.pool.maxActive=10
Master.pool.minIdle=2
Master.audit.sql=audit.sql

MasterDomain.xml содержит:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       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/util
                           http://www.springframework.org/schema/util/spring-util.xsd">

  <bean id="MasterContentXML" class="org.apache.syncope.core.spring.ResourceWithFallbackLoader">
    <property name="primary" value="file:${content.directory}/domains/MasterContent.xml"/>
    <property name="fallback" value="classpath:domains/MasterContent.xml"/>
  </bean>
  <bean id="MasterProperties" class="org.apache.syncope.core.spring.ResourceWithFallbackLoader">
    <property name="primary" value="file:${content.directory}/domains/Master.properties"/>
    <property name="fallback" value="classpath:domains/Master.properties"/>
  </bean>
  <bean id="MasterDatabaseSchema" class="java.lang.String">
    <constructor-arg value="${Master.schema}"/>
  </bean>

  <!-- Use JNDI datasource as default but, when not available, revert to
  local datasource, with different properties for execution and testing. 
  In any case, get all JDBC connections with a determined isolation level. -->
  <bean id="MasterDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" primary="true">
    <property name="jndiName" value="java:comp/env/jdbc/syncopeMasterDataSource"/>
    <property name="defaultObject" ref="localMasterDataSource"/>
  </bean>

  <bean id="localMasterDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <property name="driverClassName" value="${Master.driverClassName}"/>
    <property name="jdbcUrl" value="${Master.url}"/>
    <property name="username" value="${Master.username}"/>
    <property name="password" value="${Master.password}"/>
    <!-- connection pool configuration - transaction isolation, default READ_COMMITTED (see SYNCOPE-202) -->
    <property name="transactionIsolation">
      <util:constant static-field="${Master.pool.transactionIsolation:java.sql.Connection.TRANSACTION_READ_COMMITTED}"/>
    </property>
    <!-- connection pool configuration - default values taken from HikariConfig default values -->
    <property name="maximumPoolSize" value="${Master.pool.maxActive:8}"/>
    <property name="minimumIdle" value="${Master.pool.minIdle:0}"/>
  </bean>

  <bean class="org.springframework.jdbc.datasource.init.DataSourceInitializer">
    <property name="dataSource" ref="MasterDataSource"/>
    <property name="enabled" value="true"/>
    <property name="databasePopulator">
      <bean class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
        <property name="continueOnError" value="true"/>
        <property name="ignoreFailedDrops" value="true"/>
        <property name="sqlScriptEncoding" value="UTF-8"/>
        <property name="scripts">
          <array>
            <value type="org.springframework.core.io.Resource">
              classpath:/audit/${Master.audit.sql}
            </value>
          </array>
        </property>
      </bean>
    </property>
  </bean>

  <bean id="MasterEntityManagerFactory"
        class="org.apache.syncope.core.persistence.jpa.spring.DomainEntityManagerFactoryBean">
    <property name="mappingResources">
      <list>
        <value>${Master.orm}</value>
      </list>
    </property>
    <property name="persistenceUnitName" value="Master"/>
    <property name="dataSource" ref="MasterDataSource"/>
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
        <property name="showSql" value="false"/>
        <property name="generateDdl" value="true"/>
        <property name="databasePlatform" value="${Master.databasePlatform}"/>
      </bean>
    </property>
    <property name="commonEntityManagerFactoryConf" ref="commonEMFConf"/>
  </bean>  

  <bean id="MasterTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="MasterEntityManagerFactory"/>
    <qualifier value="Master"/>
  </bean>

  <tx:annotation-driven transaction-manager="MasterTransactionManager"/>

</beans>

У меня естьвключил mysql-connector-java-5.1.48.jar в мою папку lib tomcat. Пробовал использовать последнюю версию драйвера mysql-connector-java-8.0.17.jar и все равно получаю ту же ошибку.

Как мне решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...