<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Book Antiqua";
        panose-1:2 4 6 2 5 3 5 3 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I have Keycloak 1.9.8-Final running against an Oracle database and it appears that when the connections are unused for a period of time (usually overnight) Keycloak is unable to open a JDBC connection to the database. I spoke with the
DBAs and the database is not closing the connections. According to the DBAs I need to enable connection validation but I’m not a programmer and can’t find a good example of how it’s done. Can anyone provide some help with this? Am I on the right track in
resolving the issue?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This is from my standalone-ha.xml:<o:p></o:p></p>
<p class="MsoNormal"><datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"><o:p></o:p></p>
<p class="MsoNormal"> <connection-url>jdbc:oracle:thin:@<servername>:<port>:<databasename></connection-url><o:p></o:p></p>
<p class="MsoNormal"> <driver>oracle</driver><o:p></o:p></p>
<p class="MsoNormal"> <pool><o:p></o:p></p>
<p class="MsoNormal"> <min-pool-size>1</min-pool-size><o:p></o:p></p>
<p class="MsoNormal"> <max-pool-size>5</max-pool-size><o:p></o:p></p>
<p class="MsoNormal"> <prefill>true</prefill><o:p></o:p></p>
<p class="MsoNormal"> </pool><o:p></o:p></p>
<p class="MsoNormal"> <security><o:p></o:p></p>
<p class="MsoNormal"> <user-name><name></user-name><o:p></o:p></p>
<p class="MsoNormal"> <password><password></password><o:p></o:p></p>
<p class="MsoNormal"> </security><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> </datasource><o:p></o:p></p>
<p class="MsoNormal"> <drivers><o:p></o:p></p>
<p class="MsoNormal"> <driver name="h2" module="com.h2database.h2"><o:p></o:p></p>
<p class="MsoNormal"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class><o:p></o:p></p>
<p class="MsoNormal"> </driver><o:p></o:p></p>
<p class="MsoNormal"> <driver name="oracle" module="com.oracle"><o:p></o:p></p>
<p class="MsoNormal"> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class><o:p></o:p></p>
<p class="MsoNormal"> </driver><o:p></o:p></p>
<p class="MsoNormal"> </drivers><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And this is the error:<o:p></o:p></p>
<p class="MsoNormal">2016-07-14 00:13:09,460 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Timer-2) SQL Error: 0, SQLState: null<o:p></o:p></p>
<p class="MsoNormal">2016-07-14 00:13:09,461 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Timer-2) javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/KeycloakDS<o:p></o:p></p>
<p class="MsoNormal">2016-07-14 00:13:09,462 ERROR [org.keycloak.services] (Timer-2) KC-SERVICES0089: Failed to run scheduled task ClearExpiredUserSessions: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Unable to acquire
JDBC Connection<o:p></o:p></p>
<p class="MsoNormal"> at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)<o:p></o:p></p>
<p class="MsoNormal"> at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)<o:p></o:p></p>
<p class="MsoNormal"> at org.hibernate.jpa.spi.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1700)<o:p></o:p></p>
<p class="MsoNormal"> at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:48)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.connections.jpa.JpaKeycloakTransaction.begin(JpaKeycloakTransaction.java:39)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.DefaultKeycloakTransactionManager.enlist(DefaultKeycloakTransactionManager.java:41)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:70)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:54)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:101)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:51)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:33)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:101)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.models.cache.infinispan.RealmCacheSession.getDelegate(RealmCacheSession.java:161)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.models.cache.infinispan.RealmCacheSession.getRealms(RealmCacheSession.java:424)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.scheduled.ClearExpiredUserSessions.run(ClearExpiredUserSessions.java:33)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner$1.call(ClusterAwareScheduledTaskRunner.java:53)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner$1.call(ClusterAwareScheduledTaskRunner.java:49)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.cluster.infinispan.InfinispanClusterProvider.executeIfNotExecuted(InfinispanClusterProvider.java:90)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner.runTask(ClusterAwareScheduledTaskRunner.java:49)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.services.scheduled.ScheduledTaskRunner.run(ScheduledTaskRunner.java:44)<o:p></o:p></p>
<p class="MsoNormal"> at org.keycloak.timer.basic.BasicTimerProvider$1.run(BasicTimerProvider.java:51)<o:p></o:p></p>
<p class="MsoNormal"> at java.util.TimerThread.mainLoop(Timer.java:555)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span style="font-family:"Times New Roman","serif";color:#365F91">Thomas Barcia<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:8.0pt;font-family:"Book Antiqua","serif";color:#A6A6A6">Unix Administrator<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:8.0pt;font-family:"Book Antiqua","serif";color:#A6A6A6"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:8.0pt;font-family:"Book Antiqua","serif";color:#A6A6A6">World Fuel Services Corporation<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:8.0pt;font-family:"Book Antiqua","serif";color:#A6A6A6">9800 NW 41st Street|Miami, FL 33178<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:8.0pt;font-family:"Book Antiqua","serif";color:#A6A6A6">office: 305.351.4910|email:
</span><span style="font-size:8.0pt;font-family:"Book Antiqua","serif""><a href="mailto:tbarcia@wfscorp.com"><span style="color:blue">tbarcia@wfscorp.com</span></a></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif";color:#1F497D"><img border="0" width="69" height="40" id="Picture_x0020_1" src="cid:image001.png@01D1DDB1.39F60770" alt="Description: Description: wfs"></span><span style="font-size:12.0pt;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p>*** This communication has been sent from World Fuel Services <br>
Corporation or its subsidiaries or its affiliates for the intended recipient <br>
only and may contain proprietary, confidential or privileged information. <br>
If you are not the intended recipient, any review, disclosure, copying, <br>
use, or distribution of the information included in this communication <br>
and any attachments is strictly prohibited. If you have received this <br>
communication in error, please notify us immediately by replying to this <br>
communication and delete the communication, including any <br>
attachments, from your computer. Electronic communications sent to or <br>
from World Fuel Services Corporation or its subsidiaries or its affiliates <br>
may be monitored for quality assurance and compliance purposes.***</p>
<p></p></body>
</html>