サーバーを再起動しようとすると、以下の例外が発生しました。
2012-06-07 17:46:14,872 ERROR [http-0.0.0.0-8080-25]-[org.jboss.web.tomcat.security.JBossWebRealm] Error during authenticate
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at org.jboss.security.plugins.JBossAuthorizationManager.getRolesAsSet(JBossAuthorizationManager.java:317)
at org.jboss.security.plugins.JBossAuthorizationManager.getUserRoles(JBossAuthorizationManager.java:233)
at org.jboss.security.plugins.auth.JaasSecurityManagerBase.getUserRoles(JaasSecurityManagerBase.java:457)
at org.jboss.security.plugins.JaasSecurityManager.getUserRoles(JaasSecurityManager.java:208)
at org.jboss.web.tomcat.security.JBossWebRealm.getCachingPrincipal(JBossWebRealm.java:669)
at org.jboss.web.tomcat.security.JBossWebRealm.authenticate(JBossWebRealm.java:409)
at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:181)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
JBOSS の JBossAuthorizationManager のメソッド getRolesAsSet のコードは次のとおりです。 //プライベート メソッド
private HashSet<Principal> getRolesAsSet(RoleGroup roles)
{
HashSet<Principal> userRoles = null;
if( roles != null )
{
userRoles = new HashSet<Principal>();
List<Role> rolesList = roles.getRoles();
for(Role r: rolesList)
{
userRoles.add(new SimplePrincipal(r.getRoleName()));
}
}
return userRoles;
}
私が知っているように (そしてメソッドでいくつかの簡単なテストを既に行っています)、いくつかのスレッドが RoleGroup "ロール" のロールを追加または削除すると同時に、roleList の反復子が呼び出されると、上記のように ConcurrentModificationException が発生します。
これはJBOSSのバグだと思います。これを回避するために JBOSS で何らかの設定を行うことができるかどうかはわかりません。私のJBOSSサーバーのバージョンは「jboss-5.1.0.GA」です
アドバイスをお願いします。ありがとう。