# Using Oracle 19 like keycloak database

**URL:** <https://forum.keycloak.org/t/using-oracle-19-like-keycloak-database/18237>\
**Category:** Miscellanaeous\
**Created:** [November 2, 2022, 11:27am UTC](https://forum.keycloak.org/t/using-oracle-19-like-keycloak-database/18237 "2022-11-02T11:27:06Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![nestle2377](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/nestle2377/32/3163_2.png) [@nestle2377](https://forum.keycloak.org/u/nestle2377)\
**Post date:** [November 2, 2022, 11:27am UTC](https://forum.keycloak.org/t/using-oracle-19-like-keycloak-database/18237/1 "2022-11-02T11:27:06Z")

</div>

Hi to all, I’m trying to configure oracle 19 like keycloak DB.  
I’ve follow several guide.  
I have download the oracle driver and put it in the modules\system\layers\keycloak\com\oracle\main directory, create in that directory the module.xml file in this way:

```auto
<?xml version=”1.0" ?>
<module xmlns=”urn:jboss:module:1.3" name=”com.oracle”>
 <resources>
 <resource-root path=”ojdbc8.jar”/>
 </resources>
 <dependencies>
 <module name=”javax.api”/>
 <module name=”javax.transaction.api”/>
 </dependencies>
</module>

```

after this I’ve create a driver in standalone.xml 🙂

```auto
  </driver>
						<driver name="oracle" module="com.oracle">
					      <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
					     </driver>

```

and change the keycloakDS in this way:

```auto
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
					 <connection-url>jdbc:oracle:thin:@localhost:1521/orcl</connection-url>
					 <driver>oracle</driver>
					 <security>
					  <user-name> **** </user-name>
					  <password> ***** </password>
					 </security>
					 <!--<validation>
					  <background-validation>true</background-validation>
					  <background-validation-millis>60000</background-validation-millis>
					 </validation>-->
					 <pool>
					  <max-pool-size>20</max-pool-size>
					 </pool>
</datasource>

```

I’ve used the correct credential. with other tools on the same server I can enter in my db.

when keycloak starts I’ve this error:

```auto
12:09:53,123 FATAL [org.keycloak.services] (ServerService Thread Pool -- 61) Error during startup: java.lang.RuntimeException: Failed to connect to database
        at org.keycloak.keycloak-model-jpa@19.0.2//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.getConnection(DefaultJpaConnectionProviderFactory.java:420)
        at org.keycloak.keycloak-model-jpa@19.0.2//org.keycloak.connections.jpa.updater.liquibase.lock.LiquibaseDBLockProvider.lazyInit(LiquibaseDBLockProvider.java:65)
        at org.keycloak.keycloak-model-jpa@19.0.2//org.keycloak.connections.jpa.updater.liquibase.lock.LiquibaseDBLockProvider.lambda$waitForLock$2(LiquibaseDBLockProvider.java:96)
        at org.keycloak.keycloak-server-spi-private@19.0.2//org.keycloak.models.utils.KeycloakModelUtils.suspendJtaTransaction(KeycloakModelUtils.java:751)
        at org.keycloak.keycloak-model-jpa@19.0.2//org.keycloak.connections.jpa.updater.liquibase.lock.LiquibaseDBLockProvider.waitForLock(LiquibaseDBLockProvider.java:94)
        at org.keycloak.keycloak-services@19.0.2//org.keycloak.services.resources.KeycloakApplication$1.run(KeycloakApplication.java:135)
        at org.keycloak.keycloak-server-spi-private@19.0.2//org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:250)
        at org.keycloak.keycloak-services@19.0.2//org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:129)
        at org.keycloak.keycloak-wildfly-extensions@19.0.2//org.keycloak.provider.wildfly.WildflyPlatform.onStartup(WildflyPlatform.java:47)
        at org.keycloak.keycloak-services@19.0.2//org.keycloak.services.resources.KeycloakApplication.<init>(KeycloakApplication.java:115)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ConstructorInjectorImpl.constructOutsideRequest(ConstructorInjectorImpl.java:225)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ConstructorInjectorImpl.construct(ConstructorInjectorImpl.java:209)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.providerfactory.Utils.createProviderInstance(Utils.java:102)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.createProviderInstance(ResteasyProviderFactoryImpl.java:1385)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ResteasyDeploymentImpl.createApplication(ResteasyDeploymentImpl.java:418)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ResteasyDeploymentImpl.initializeObjects(ResteasyDeploymentImpl.java:265)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ResteasyDeploymentImpl.startInternal(ResteasyDeploymentImpl.java:137)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.core.ResteasyDeploymentImpl.start(ResteasyDeploymentImpl.java:121)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:144)
        at org.jboss.resteasy.resteasy-core@4.7.6.Final//org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:42)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
        at org.wildfly.security.elytron-web.undertow-server-servlet@1.10.1.Final//org.wildfly.elytron.web.undertow.server.servlet.RunAsLifecycleInterceptor.doIt(RunAsLifecycleInterceptor.java:70)
        at org.wildfly.security.elytron-web.undertow-server-servlet@1.10.1.Final//org.wildfly.elytron.web.undertow.server.servlet.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:76)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:309)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:145)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:588)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:559)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
        at io.undertow.servlet@2.2.17.Final//io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:601)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:106)
        at org.wildfly.extension.undertow@26.1.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:87)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:1589)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: javax.naming.NameNotFoundException: datasources/KeycloakDS [Root exception is java.lang.IllegalStateException]
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:152)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:239)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
        at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
        at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
        at org.keycloak.keycloak-model-jpa@19.0.2//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.getConnection(DefaultJpaConnectionProviderFactory.java:413)
        ... 47 more
Caused by: java.lang.IllegalStateException
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.value.InjectedValue.getValue(InjectedValue.java:50)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.service.BinderService.getValue(BinderService.java:148)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.service.BinderService.getValue(BinderService.java:46)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl.getValue(ServiceControllerImpl.java:1109)
        at org.jboss.as.naming@26.1.1.Final//org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:130)
        ... 56 more

```

any idea?

I’ve try several ojdbc driver taken from oracle site but with no success…

thanks!

---

<div class="post-metadata">

**Author:** ![bpedersen2](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/bpedersen2/32/3934_2.png) [@bpedersen2](https://forum.keycloak.org/u/bpedersen2)\
**Post date:** [November 3, 2022, 4:07pm UTC](https://forum.keycloak.org/t/using-oracle-19-like-keycloak-database/18237/2 "2022-11-03T16:07:51Z")

</div>

It looks like you are using the wrong approach to configure keycloak, since keycloak 18 this has changed a lot (done via arguments to kc.sh build and/or start, not via xml). If oracle is not included in the provided builtin adapaters (it should be included) you may need to build your own jar (check [GitHub - thomasdarimont/keycloak-custom-server: Custom Keycloak.X Server Distribution with selective features](https://github.com/thomasdarimont/keycloak-custom-server) for a starting point=

---

<div class="post-metadata">

**Author:** ![nestle2377](https://yyz2.discourse-cdn.com/free1/user_avatar/forum.keycloak.org/nestle2377/32/3163_2.png) [@nestle2377](https://forum.keycloak.org/u/nestle2377)\
**Post date:** [November 4, 2022, 1:00pm UTC](https://forum.keycloak.org/t/using-oracle-19-like-keycloak-database/18237/3 "2022-11-04T13:00:23Z")

</div>

thanks for reply, you are correct but I’m still using the wildfly version, I’m planning to migrate to quarkus version as soon as possible.
