Configure hikariCP to use kerberos

2,743 views
Skip to first unread message

Per Berge

unread,
Apr 23, 2015, 5:50:16 AM4/23/15
to hika...@googlegroups.com
Hi.

We're currently using hibernate 4.3.8 with c3p0 and are looking into trying out hikariCP.
We have been testing the hibernate-hikaricp.4.3.8.final.jar to integrate with hibernate.
We're using oracle 11g jdbc to connect to our database.

This has worked fine in our local application, but we hit some issues when trying to change to hikariCP in our windows services.

It seems hikariCP is not kerberos aware, basically we need to set two java properties that needs to be passed on to the Oracle DataSource.

Our hibernate.cfg.xml config:
 
<property name="hibernate.hikari.dataSource.url">jdbc:oracle:thin:@xyz</property>
<property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property>
<property name="hibernate.hikari.dataSourceClassName">oracle.jdbc.pool.OracleDataSource</property>        
<property name="hibernate.hikari.maximumPoolSize">10</property>
<property name="hibernate.hikari.minimumIdle">1</property>


<property name="hibernate.connection.oracle.net.authentication_services">KERBEROS5</property>
<property name="hibernate.connection.oracle.net.kerberos5_mutual_authentication">true</property>


We've successfully been using kerberos towards various databases,LDAP and various webservice API's.
Could you provide any insight in whether hikariCP supports kerberos login? Or give any guidance on how we can set the two properties below?

<property name="hibernate.connection.oracle.net.authentication_services">KERBEROS5</property>
<property name="hibernate.connection.oracle.net.kerberos5_mutual_authentication">true</property>

We're receiving a long stacktrace indicating that there's no username password supplied to the database. (ORA-01017: invalid username/password; logon denied).
I'm including it below for reference.

INFO   | jvm 1    | 2015/04/23 10:28:14 | [2015-04-23 10:28:14,915] INFO[WrapperSimpleAppMain] - instantiateExplicitConnectionProvider at(ConnectionProviderInitiator.java:190) - HHH000130: Instantiating explicit connection provider: com.zaxxer.hikari.hibernate.HikariConnectionProvider
INFO  
| jvm 1    | 2015/04/23 10:28:15 | [2015-04-23 10:28:15,211] INFO[WrapperSimpleAppMain] - <init> at(HikariDataSource.java:77) - HikariCP pool HikariPool-0 is starting.
INFO  
| jvm 1    | 2015/04/23 10:28:15 | [2015-04-23 10:28:15,617] INFO[WrapperSimpleAppMain] - shutdown at(BaseHikariPool.java:261) - HikariCP pool HikariPool-0 is shutting down.
INFO  
| jvm 1    | 2015/04/23 10:28:15 | [2015-04-23 10:28:15,633]ERROR[WrapperSimpleAppMain] - <clinit> at(HibernateUtil.java:72) - Unable to configure SessionFactory
INFO  
| jvm 1    | 2015/04/23 10:28:15 | org.hibernate.HibernateException: java.lang.RuntimeException: Fail-fast during pool initialization
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.hibernate.HikariConnectionProvider.configure(HikariConnectionProvider.java:84)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.statoil.rts.dao.HibernateUtil.<clinit>(HibernateUtil.java:67)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.statoil.rts.mirrorer.Mirrorer.main(Mirrorer.java:54)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at java.lang.reflect.Method.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:236)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at java.lang.Thread.run(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | Caused by: java.lang.RuntimeException: Fail-fast during pool initialization
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:500)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:172)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:61)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:49)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:78)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.hibernate.HikariConnectionProvider.configure(HikariConnectionProvider.java:80)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | ... 18 more
INFO  
| jvm 1    | 2015/04/23 10:28:15 | Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied
INFO  
| jvm 1    | 2015/04/23 10:28:15 |
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:938)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:480)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:416)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:825)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:596)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:303)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:230)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:175)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:396)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:498)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | ... 23 more
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp:
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: Encountered an error running main:
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: java.lang.ExceptionInInitializerError
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.statoil.rts.dao.HibernateUtil.<clinit>(HibernateUtil.java:73)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.statoil.rts.mirrorer.Mirrorer.main(Mirrorer.java:54)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at java.lang.reflect.Method.invoke(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:236)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at java.lang.Thread.run(Unknown Source)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: Caused by: org.hibernate.HibernateException: java.lang.RuntimeException: Fail-fast during pool initialization
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.hibernate.HikariConnectionProvider.configure(HikariConnectionProvider.java:84)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.statoil.rts.dao.HibernateUtil.<clinit>(HibernateUtil.java:67)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: ... 7 more
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: Caused by: java.lang.RuntimeException: Fail-fast during pool initialization
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:500)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:172)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:61)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:49)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:78)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.hibernate.HikariConnectionProvider.configure(HikariConnectionProvider.java:80)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: ... 18 more
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied
INFO  
| jvm 1    | 2015/04/23 10:28:15 |
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:938)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:480)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:416)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:825)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:596)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:303)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:230)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:175)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:396)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:498)
INFO  
| jvm 1    | 2015/04/23 10:28:15 | WrapperSimpleApp: ... 23 more

Brett Wooldridge

unread,
Apr 23, 2015, 10:03:56 AM4/23/15
to hika...@googlegroups.com
This appears to be an "issue" in the HikariConnectionProvider where by "hibernate.connection.*" properties are not getting passed through to the underlying driver directly.  I'm not sure I would label it a bug.

The properties you are trying to set are not easily settable on the OracleDataSource instance.  In this case, to set these you'll need "Driver-based" configuration, instead of DataSource-based.  HikariCP will map "dataSource" properties into ordinary driver properties...

What you'll need is something like this:

<property name="hibernate.connection.url">jdbc:oracle:thin:@xyz</property>

<property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property>

<property name="hibernate.hikari.maximumPoolSize">10</property> 
<property name="hibernate.hikari.minimumIdle">1</property>

<!-- The "hibernate.hikari.dataSource" will be stripped and the remainder used as a JDBC driver property -->
<property name="hibernate.hikari.dataSource.oracle.net.authentication_services">KERBEROS5</property>
<property name="hibernate.hikari.dataSource.oracle.net.kerberos5_mutual_authentication">true</property>

Message has been deleted

Per Berge

unread,
Apr 24, 2015, 4:18:23 AM4/24/15
to hika...@googlegroups.com
Hi.

Thank you for a quick reply.

Your suggestion doesn't work in this situation. But you set me on the right path to resolve it.
The two properties I referred to above is not connection properties, i.e. you will get a method not found exception, since there are no setter or getter methods to pass them on to in the connection.

In the c3p0 connection provider those two properies are set as simple java properties.
I resolved this issue by setting those two properties on the jvm instead.

For reference if anybody else is having this issue, set the java properties.

oracle.net.authentication_services=KERBEROS5
oracle
.net.kerberos5_mutual_authentication=true

-Per-

Brett Wooldridge

unread,
Apr 24, 2015, 4:27:03 AM4/24/15
to hika...@googlegroups.com
I'm glad you found the solution, thanks for posting it back here.  I'm sure it will prove useful for users experiencing the same issue in the future.

-Brett

Reply all
Reply to author
Forward
0 new messages