Skip to content

Conversation

FroMage
Copy link
Member

@FroMage FroMage commented Jan 30, 2019

ATM it doesn't work on native unless we enable SSL. If the server says it supports SSL, the client will just crash if SSL is not enabled.

Perhaps a shamrock config setting would be better to make the client disable SSL. WDYT @Sanne ?

@FroMage FroMage requested a review from Sanne January 30, 2019 10:53
@gsmet
Copy link
Member

gsmet commented Jan 30, 2019

@FroMage does it work when you have shamrock.ssl.native = true in your MP config?

Let's not rush into disabling SSL everywhere, I'm trying to get to an acceptable solution.

@Sanne
Copy link
Member

Sanne commented Jan 30, 2019

right let's not rush this. Eager to see what @gsmet will come up with first ;)

If we end up merging a change like this one, please make sure an error is raised when the user would expect SSL to be used.

I'm very concerned that people will have some features break only in native mode; we need to make sure people can have peace of mind that what they have been testing for days in JVM mode will work in native as well.

@FroMage
Copy link
Member Author

FroMage commented Jan 30, 2019

OK, so I'll test with SSL enabled, and try to come up with a shamrock config to disable SSL just for postgres, in case the user does not want SSL.

@FroMage
Copy link
Member Author

FroMage commented Jan 30, 2019

So I confirm it works with shamrock.ssl.native = true.

@FroMage
Copy link
Member Author

FroMage commented Jan 30, 2019

OK I made it a setting shamrock.datasource.ssl=default/disable with support for MySQL and PG. Defaults to driver-dependent (the current behaviour).

@FroMage
Copy link
Member Author

FroMage commented Jan 30, 2019

I think the last step missing is to catch this exception:

2019-01-30 17:38:59,051 atlantis shamrock-panache-example-1.0.0.Alpha1-SNAPSHOT-runner[14897] ERROR [o.h.e.j.s.SqlExceptionHelper] (mjavax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate Sessionain) Exception while creating new connection
Factory
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.persistenceException(FastBootEntityManagerFactoryBuilder.java:108)
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:79)
	at org.jboss.shamrock.jpa.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:64)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at org.jboss.shamrock.jpa.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:114)
	at org.jboss.shamrock.jpa.runtime.JPAConfig.startAll(JPAConfig.java:71)
	at org.jboss.shamrock.jpa.runtime.JPADeploymentTemplate.startAllPersistenceUnits(JPADeploymentTemplate.java:104)
	at org.jboss.shamrock.deployment.steps.HibernateResourceProcessor$startPersistenceUnits7.deploy(Unknown Source)
	at org.jboss.shamrock.runner.ApplicationImpl1.doStart(Unknown Source)
	at org.jboss.shamrock.runtime.Application.start(Application.java:90)
	at org.jboss.shamrock.runtime.Application.run(Application.java:191)
	at org.jboss.shamrock.runner.GeneratedMain.main(Unknown Source)
Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
	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.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:62)
	at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl.buildDdlTransactionIsolator(JtaTransactionCoordinatorBuilderImpl.java:46)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.getDdlTransactionIsolator(HibernateSchemaManagementTool.java:175)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.buildGenerationTargets(HibernateSchemaManagementTool.java:135)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:110)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:144)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:77)
	... 11 more
Caused by: java.sql.SQLException: Exception while creating new connection
	at io.agroal.pool.ConnectionPool.handlerFromSharedCache(ConnectionPool.java:222)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:144)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
	at org.jboss.shamrock.agroal.runtime.DataSourceProducer_ProducerMethod_getDatasource_X4z_MGM88FS2mXbdAiCvwo-fE3M=_ClientProxy.getConnection(Unknown Source)
	at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
	at org.hibernate.resource.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:59)
	... 20 more
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Exception while creating new connection
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:192)
	at io.agroal.pool.ConnectionPool.handlerFromSharedCache(ConnectionPool.java:190)
	... 26 more
Caused by: java.lang.RuntimeException: Exception while creating new connection
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:332)
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:312)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:58)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:480)
	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:198)
Caused by: org.postgresql.util.PSQLException: Could not find a java cryptographic algorithm: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext).
	at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:162)
	at org.postgresql.core.SocketFactoryFactory.getSslSocketFactory(SocketFactoryFactory.java:61)
	at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:33)
	at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:435)
	at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94)
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
	at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
	at org.postgresql.Driver.makeConnection(Driver.java:454)
	at org.postgresql.Driver.connect(Driver.java:256)
	at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:195)
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:323)
	... 8 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext)
	at java.security.Provider$Service.newInstance(Provider.java:1621)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
	at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
	at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:51)
	... 19 more
Caused by: java.lang.NoSuchMethodException: sun.security.ssl.SSLContextImpl$TLSContext.<init>()
	at java.lang.Class.getConstructor0(DynamicHub.java:3082)
	at java.lang.Class.getConstructor(DynamicHub.java:1825)
	at java.security.Provider$Service.newInstance(Provider.java:1594)
	... 23 more
Exception in thread "main" java.lang.RuntimeException: Failed to start shamrock
	at org.jboss.shamrock.runner.ApplicationImpl1.doStart(Unknown Source)
	at org.jboss.shamrock.runtime.Application.start(Application.java:90)
	at org.jboss.shamrock.runtime.Application.run(Application.java:191)
	at org.jboss.shamrock.runner.GeneratedMain.main(Unknown Source)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.persistenceException(FastBootEntityManagerFactoryBuilder.java:108)
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:79)
	at org.jboss.shamrock.jpa.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:64)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at org.jboss.shamrock.jpa.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:114)
	at org.jboss.shamrock.jpa.runtime.JPAConfig.startAll(JPAConfig.java:71)
	at org.jboss.shamrock.jpa.runtime.JPADeploymentTemplate.startAllPersistenceUnits(JPADeploymentTemplate.java:104)
	at org.jboss.shamrock.deployment.steps.HibernateResourceProcessor$startPersistenceUnits7.deploy(Unknown Source)
	... 4 more
Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
	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.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:62)
	at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl.buildDdlTransactionIsolator(JtaTransactionCoordinatorBuilderImpl.java:46)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.getDdlTransactionIsolator(HibernateSchemaManagementTool.java:175)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.buildGenerationTargets(HibernateSchemaManagementTool.java:135)
	at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:110)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:144)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
	at org.jboss.shamrock.jpa.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:77)
	... 11 more
Caused by: java.sql.SQLException: Exception while creating new connection
	at io.agroal.pool.ConnectionPool.handlerFromSharedCache(ConnectionPool.java:222)
	at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:144)
	at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
	at org.jboss.shamrock.agroal.runtime.DataSourceProducer_ProducerMethod_getDatasource_X4z_MGM88FS2mXbdAiCvwo-fE3M=_ClientProxy.getConnection(Unknown Source)
	at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
	at org.hibernate.resource.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:59)
	... 20 more
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Exception while creating new connection
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:192)
	at io.agroal.pool.ConnectionPool.handlerFromSharedCache(ConnectionPool.java:190)
	... 26 more
Caused by: java.lang.RuntimeException: Exception while creating new connection
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:332)
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:312)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:58)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:480)
	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:198)
Caused by: org.postgresql.util.PSQLException: Could not find a java cryptographic algorithm: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext).
	at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:162)
	at org.postgresql.core.SocketFactoryFactory.getSslSocketFactory(SocketFactoryFactory.java:61)
	at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:33)
	at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:435)
	at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94)
	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
	at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
	at org.postgresql.Driver.makeConnection(Driver.java:454)
	at org.postgresql.Driver.connect(Driver.java:256)
	at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:195)
	at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:323)
	... 8 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext)
	at java.security.Provider$Service.newInstance(Provider.java:1621)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
	at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
	at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:51)
	... 19 more
Caused by: java.lang.NoSuchMethodException: sun.security.ssl.SSLContextImpl$TLSContext.<init>()
	at java.lang.Class.getConstructor0(DynamicHub.java:3082)
	at java.lang.Class.getConstructor(DynamicHub.java:1825)
	at java.security.Provider$Service.newInstance(Provider.java:1594)

And turn it into an error that points to shamrock.ssl.native and shamrock.datasource.ssl. But it's not clear where I can catch it.

@FroMage
Copy link
Member Author

FroMage commented Jan 30, 2019

OK, found where to put it: in JPA. Please review?

@gsmet
Copy link
Member

gsmet commented Jan 30, 2019

There are some good ideas here. I'm working on it globally, will come up with a patch hopefully tomorrow.

@gsmet
Copy link
Member

gsmet commented Feb 1, 2019

Incorporated into #698 . Closing.

@gsmet gsmet closed this Feb 1, 2019
@emmanuelbernard emmanuelbernard added this to the 0.8.0 milestone Feb 5, 2019
maxandersen pushed a commit to maxandersen/quarkus that referenced this pull request Nov 5, 2022
See redhat-developer/vscode-java#1664

```
jbang init --template=cli hello.java
jbang edit --open --live hello.java
```

Hover over picocli.CommandLine, see the Javadoc magically appear
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants