[ 
https://issues.apache.org/jira/browse/FINERACT-890?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17082499#comment-17082499
 ] 

Michael Vorburger commented on FINERACT-890:
--------------------------------------------

Using {{com.mysql.cj.log.Slf4JLogger}} leads to the following, which smells of 
a ClassLoader mess (because {{org.slf4j.LoggerFactory}} is, of course, part of 
the WAR - probably just another ClassLoader)... :( Perhaps this is best 
revisited only after FINERACT-730?
{code:java}
Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: 
Failed to initialize pool: Unable to instantiate logger class 
'com.mysql.cj.log.Slf4JLogger', exception in constructor?
        at 
com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:589)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:575)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
        at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at 
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:203)
        ... 161 more
Caused by: java.sql.SQLException: Unable to instantiate logger class 
'com.mysql.cj.log.Slf4JLogger', exception in constructor?
        at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
        at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
        at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
        at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
        at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
        at 
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:85)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:452)
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
        at 
com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
        at 
com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
        at 
com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
        ... 168 more
Caused by: com.mysql.cj.exceptions.WrongArgumentException: Unable to 
instantiate logger class 'com.mysql.cj.log.Slf4JLogger', exception in 
constructor?
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at 
com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
        at 
com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
        at com.mysql.cj.log.LogFactory.getLogger(LogFactory.java:85)
        at com.mysql.cj.CoreSession.<init>(CoreSession.java:95)
        at com.mysql.cj.NativeSession.<init>(NativeSession.java:131)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:402)
        ... 175 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.cj.log.LogFactory.getLogger(LogFactory.java:75)
        ... 178 more
Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at com.mysql.cj.log.Slf4JLogger.<init>(Slf4JLogger.java:39)
        ... 183 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 184 more{code}

> Custom slf4j integrated logger for the (optional!) MySQL JDBC driver support 
> in Fineract
> ----------------------------------------------------------------------------------------
>
>                 Key: FINERACT-890
>                 URL: https://issues.apache.org/jira/browse/FINERACT-890
>             Project: Apache Fineract
>          Issue Type: Improvement
>            Reporter: Michael Vorburger
>            Priority: Major
>              Labels: perfomance
>
> While working on FINERACT-762, I've stumbled upon:
> {code}Caused by: 
> com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to 
> initialize pool: Unable to load class for logger 
> 'com.mysql.jdbc.log.StandardLogger'
>       at 
> com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:589)
>       at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:575)
>       at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
>       at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81)
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>       at 
> org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:203)
>       ... 161 more
> Caused by: java.sql.SQLException: Unable to load class for logger 
> 'com.mysql.jdbc.log.StandardLogger'
>       at 
> com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>       at 
> com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
>       at 
> com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
>       at 
> com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
>       at 
> com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
>       at 
> com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:85)
>       at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:452)
>       at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
>       at 
> com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
>       at 
> com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
>       at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
>       at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
>       at 
> com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
>       at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
>       ... 168 more
> Caused by: com.mysql.cj.exceptions.WrongArgumentException: Unable to load 
> class for logger 'com.mysql.jdbc.log.StandardLogger'
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>       at 
> com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
>       at 
> com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
>       at com.mysql.cj.log.LogFactory.getLogger(LogFactory.java:77)
>       at com.mysql.cj.CoreSession.<init>(CoreSession.java:95)
>       at com.mysql.cj.NativeSession.<init>(NativeSession.java:131)
>       at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:402)
>       ... 175 more
> Caused by: java.lang.ClassNotFoundException: 
> com.mysql.cj.log.com.mysql.jdbc.log.StandardLogger
>       at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:264)
>       at com.mysql.cj.log.LogFactory.getLogger(LogFactory.java:70)
>       ... 178 more{code}
> This seems to be due to us setting the Hikari DataSource logger property to 
> com.mysql.jdbc.log.StandardLogger, in both 
> org.apache.fineract.infrastructure.core.service.TomcatJdbcDataSourcePerTenantService
>  and META-INF/spring/hikariDataSource.xml.
> That classname seems to be wrong (outdated?), at least for the latest 
> mysql-connector-java version 8.0.19.
> According to 
> https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html,
>  that's the default anyway, so I'll just comment it out, for now.
> What I think we really should be doing later is implement that it so that 
> instead of spewing to STDERR, it logs correctly (bridged) via slf4j API.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to