Connection problems with a federation provider for Oracle

Hello guys, I’m trying to create a custom provider to access users in an existing oracle database (user federation) but I’m having some problems when I tried to get users.

The error I got is Unchecked throwable in managedConnectionReconnected following by Unable to acquire JDBC Connection :

16:25:55,726 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) javax.resource.ResourceException: IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@472e0f8a[state=DESTROYED managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@5b688b54 connection handles=0 lastReturned=1584721555724 lastValidated=1584721397404 lastCheckedOut=1584721555723 trackByTx=false pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@402db675 mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool@27a49d0d[pool=KeycloakDS] xaResource=LocalXAResourceImpl@2c7dc36e[connectionListener=472e0f8a connectionManager=66f85487 warned=false currentXid=null productName=H2 productVersion=1.4.193 (2016-10-31) jndiName=java:jboss/datasources/KeycloakDS] txSync=null]
keycloak    | 16:25:55,732 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection

My current stack

To set up my keycloak server I’m using this docker image https://hub.docker.com/r/jboss/keycloak/

My database is in a docker container oracle-database-enterprise-edition oracle 12c from docker hub.

The driver I’m using is ojdbc8.jar downloaded and renamed (to ojdbc.jar) from https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html

Configuration

My overall process is:

  • Copy the oracle driver to /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver

  • Add my driver definition to /opt/jboss/keycloak/standalone/configuration/standalone-ha.xml

<driver name="oracle" module="com.oracle.jdbc">
   <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
  • Add my data source definition to /opt/jboss/keycloak/standalone/configuration/standalone-ha.xml
<datasource jndi-name="java:jboss/datasources/myDS" pool-name="myDS" enabled="true" use-java-context="true">
   <connection-url>jdbc:oracle:thin:@{address}:1521:ORCLCDB</connection-url>
   <driver>oracle</driver>
   <security>
      <user-name>USER</user-name>
      <password>pass</password>
   </security>
</datasource>
  • Copy my custom provider to /opt/jboss/keycloak/standalone/deployments/

  • To get my connection in my custom provider I do the following:

try {
 InitialContext ctx = new InitialContext();
 DataSource dataSource = (DataSource) ctx.lookup("java:jboss/datasources/myDS");
 Connection connection = dataSource.getConnection();
 provider.setConnection(connection);
} catch (NamingException | SQLException e) {
 logger.error(e.getMessage());
 e.printStackTrace();
}