Closed ard333 closed 4 years ago
Yes, that's the same issue. We haven't tried any JDBC drivers other than h2 yet. They will all require some TLC. If they can fix it in the driver it's best, but you could try to just add reflection.json to your own app (per the GraalVM docs) and see if you can get it working that way.
I have added several classes to reflect-config.json
[
{
"name": "app.main.model.Foo",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "app.main.model.FooRepository",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "org.hibernate.dialect.MySQL8Dialect",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "java.lang.management.ManagementFactory",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "java.lang.management.RuntimeMXBean",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "com.mysql.cj.exceptions.CJException",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "com.mysql.cj.exceptions.WrongArgumentException",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "com.mysql.cj.exceptions.UnableToConnectException",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "com.mysql.cj.conf.url.SingleConnectionUrl",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
},
{
"name": "com.mysql.cj.log.StandardLogger",
"allDeclaredConstructors": true,
"allDeclaredMethods": true
}
]
but I get a weird error
Caused by: java.sql.SQLNonTransientConnectionException: Cannot connect to MySQL server on 10.128.0.5:3,306.
3306 become 3,306
I tried changing the port to 333333, it become 33,333,333 so it's because of the thousand separator
full stacktrace:
2020-03-27 10:25:33.317 WARN 9596 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S01
2020-03-27 10:25:33.317 ERROR 9596 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Cannot connect to MySQL server on 10.128.0.5:3,306.
Make sure that there is a MySQL server running on the machine/port you are trying to connect to and that the machine this software is running on is able to connect to this host/port (i.e. not firewalled). Also make sure that the server has not been started with the --skip-networking flag.
2020-03-27 10:25:33.317 DEBUG 9596 --- [ main] o.h.e.t.internal.TransactionImpl : On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:448)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:376)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:572)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:360)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy260.findById(Unknown Source)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
at com.sun.proxy.$Proxy261.findById(Unknown Source)
at app.main.SampleApplication.lambda$runner$0(SampleApplication.java:35)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
at app.main.SampleApplication.main(SampleApplication.java:62)
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:107)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:134)
at org.hibernate.internal.SessionImpl.connection(SessionImpl.java:462)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:266)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle.doGetConnection(HibernateJpaDialect.java:430)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:174)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:402)
... 24 more
Caused by: java.sql.SQLNonTransientConnectionException: Cannot connect to MySQL server on 10.128.0.5:3,306.
Make sure that there is a MySQL server running on the machine/port you are trying to connect to and that the machine this software is running on is able to connect to this host/port (i.e. not firewalled). Also make sure that the server has not been started with the --skip-networking flag.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
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.ConnectionImpl.<init>(ConnectionImpl.java:470)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:562)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:38)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:104)
... 32 more
Caused by: java.lang.NullPointerException
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
... 44 more
To be tested with Petclinic JPA and JDBC as well.
I think, I also have to retest with graalvm 20.1.0 and latest commit.
Fixed using 0.7.0.BUILD-SNAPSHOT, graalvm 20.1.0, and hybrid feature + agent mode.
Thanks for your feedback, could you please check with the feature mode (the default one) in order to have full understanding of the status?
When using feature mode, I got same error as I explained before.
Start with java.sql.DriverManager
should be initialized at run time, need to include com.mysql.cj.LocalizedErrorMessages
to resource bundles, and need to add several class to reflect-config.json
.
So, I decided to try hybrid mode.
Ok I so I reopen it to evaluate if we fix it in feature mode.
Hi, I am trying to build vanilla-jpa with MySQL as database, but got some error.
1. Add mysql dependency and some config
pom.xml
application.properties
Error:
2. I add this option in compile.sh
Error:
3. Add more option in compile.sh Until here the compilation process is complete, errors appear in the runtime.
Error:
Is there anything I missed?
Maybe related with https://bugs.mysql.com/bug.php?id=91968