2015-12-18 3 views
0

У нас есть приложение Java, развернутое в Tomcat 7.0.54. Перед tomcat есть Apache 2.4.10 с модулем SiteMinder в качестве обратного прокси. Tomcat работает под Sun jdk 1.8.0-45-64bit.Случайное исключение ConcurrentModificationException в приложении Tomcat

Существует плавающую ошибка при получении запроса на случайный ресурс (иконку или JS скрипты или CSS) приложение завершается с

java.util.ConcurrentModificationException 
    java.util.PriorityQueue$Itr.next(PriorityQueue.java:535) 
    java.lang.Iterable.forEach(Iterable.java:74) 
    com.our.groupid.entity.auth.User.getAllPermissionsAsListOfStrings(User.java:129) 
    com.our.groupid.app.auth.SiteMinderSessionUserDetails.<init>(SiteMinderSessionUserDetails.java:17) 
    com.our.groupid.app.auth.SiteMinderAuthenticationDetailsSource.buildDetails(SiteMinderAuthenticationDetailsSource.java:61) 
    com.our.groupid.app.auth.SiteMinderAuthenticationDetailsSource.buildDetails(SiteMinderAuthenticationDetailsSource.java:13) 
    org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doAuthenticate(AbstractPreAuthenticatedProcessingFilter.java:178) 
    org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:113) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 

Что еще хуже, она не может быть воспроизведена в автономном Tomcat. Я полагаю, что что-то не так с сеансами \ между Apache и Tomcat, но в журнале не обнаружилось ничего подозрительного.

Есть ли у кого-нибудь идеи о первопричине такого поведения?

+1

Знаете ли вы, что такое «ConcurrentModificationException»? – Kayaman

+0

Да. Когда несколько процессов \ поток изменяет одну и ту же часть данных. Но это не похоже на ошибку приложения. Как я уже упоминал ранее, в автономном Tomcat все отлично работает. –

+0

False. Темы/процессы не имеют никакого отношения к 'ConcurrentModificationException' (ну, может, но вы можете легко достичь этого в одном потоке). Сделайте поиск здесь, и вы найдете много сообщений, где это объясняется (а также множество сообщений, в которых люди разделяют ваше недоразумение). – Kayaman

ответ

0

Похоже, что нашел.
Apache работал с mod_proxy_http и делает некоторые беспорядки с заголовками.
Переключить на: mod_proxy_ajp Решает мою проблему. Таким образом, ConcurrentModificationException был всего лишь симптомом.