<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>Hi,</div>
<div><br>
</div>
<div>We have a system in production that is logging some exceptions. This is happening in DefaultOAuth2ProviderTokenService.clearExpiredTokens. I&#8217;ve been trying to track that down but so far no luck reproducing it on my development environment. &nbsp;Has anybody
 seem this? Is it benign or something we should be concerned about?&nbsp;</div>
<div><br>
</div>
<div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>@Override</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>public void clearExpiredTokens() {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>logger.info(&quot;Cleaning out all expired tokens&quot;);</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>Collection&lt;OAuth2AccessTokenEntity&gt; accessTokens = getExpiredAccessTokens();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>logger.info(&quot;Found &quot; &#43; accessTokens.size() &#43; &quot; expired access tokens&quot;);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for (OAuth2AccessTokenEntity oAuth2AccessTokenEntity : accessTokens) {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>try {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>revokeAccessToken(oAuth2AccessTokenEntity);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>} catch (IllegalArgumentException e) {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//An ID token is deleted with its corresponding access token, but then the ID token is on the list of expired tokens as well and there is</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//nothing in place to distinguish it from any other.</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//An attempt to delete an already deleted token returns an error, stopping the cleanup dead. We need it to keep going.</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div>&#8230;</div>
</div>
<div><br>
</div>
<div>
<div>2015Aug27 16:38:49,564: ERROR: org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.</div>
<div>java.lang.IllegalStateException: Expected single result, got 2</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.util.jpa.JpaUtil.getSingleResult(JpaUtil.java:36)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.repository.impl.JpaOAuth2TokenRepository.getAccessTokenByValue(JpaOAuth2TokenRepository.java:62)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.repository.impl.JpaOAuth2TokenRepository.removeAccessToken(JpaOAuth2TokenRepository.java:79)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.repository.impl.JpaOAuth2TokenRepository$$FastClassBySpringCGLIB$$145026dd.invoke(&lt;generated&gt;)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:700)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:633)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.repository.impl.JpaOAuth2TokenRepository$$EnhancerBySpringCGLIB$$e7092f0b.removeAccessToken(&lt;generated&gt;)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.service.impl.DefaultOAuth2ProviderTokenService.revokeAccessToken(DefaultOAuth2ProviderTokenService.java:380)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.mitre.oauth2.service.impl.DefaultOAuth2ProviderTokenService.clearExpiredTokens(DefaultOAuth2ProviderTokenService.java:411)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at sun.reflect.GeneratedMethodAccessor210.invoke(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.lang.reflect.Method.invoke(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.FutureTask.runAndReset(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; at java.lang.Thread.run(Unknown Source)</div>
</div>
<div><br>
</div>
<div>Regards,</div>
<div>Luiz</div>
</body>
</html>