org.apache.coyote.tomcat5.MapperListener の問題

Tomcat再起動時に以下の例外が発生して,起動しなくなることがあった.
JDK 1.4.2_08 / Tomcat 5.0.28)

2006/07/31 4:07:45 org.apache.coyote.tomcat5.MapperListener init
警告: Error registering contexts
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:782)
at java.util.HashMap$EntryIterator.next(HashMap.java:824)
at java.util.HashMap.putAllForCreate(HashMap.java:424)
at java.util.HashMap.clone(HashMap.java:656)
at mx4j.server.DefaultMBeanRepository.clone(DefaultMBeanRepository.java:56)
at mx4j.server.MBeanServerImpl.findMBeansByPattern(MBeanServerImpl.java:1603)
at mx4j.server.MBeanServerImpl.queryObjectNames(MBeanServerImpl.java:1568)
at mx4j.server.MBeanServerImpl.queryMBeans(MBeanServerImpl.java:1512)
at org.apache.coyote.tomcat5.MapperListener.init(MapperListener.java:115)
at org.apache.coyote.tomcat5.CoyoteConnector.start(CoyoteConnector.java:1537)
at org.apache.catalina.core.StandardService.start(StandardService.java:489)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

ちょっと間をおいてからTomcatだけ再起動したらなんとかなった.

調べてみたら,version 5.0.27の場合が,ApacheのBugzillaで報告されている.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30460#c1

報告によるとこの現象は偶発的に起こり,再現した場合,Tomcatを複数回再起動しても,起動しないことがあるそうな.
正常起動した場合は、そもそもこのMapperListener.init()が実行されないともある.なんじゃこりゃ?


なお,Apache TomcatChangeLogによれば,
Tomcat 5.0系では version 5.0.27 以降,MappaerListenerに関する部分の修正記録はなく
(5.0.17にて

Fix error-condition logging statements in MapperListener

という記述はあるが…)

Tomcat 5.5系では version 5.5.8で

Deregister MapperListener after remove connector

という記述がある

5.5.8で直ったのかなぁ〜.