Java类加载器问题或并发错误?

Java类加载器问题或并发错误?,java,weblogic,classloader,static-initializer,Java,Weblogic,Classloader,Static Initializer,在WebLogic应用程序正常运行数周后,我突然遇到一个异常: <Oct 25, 2014 9:31:11 PM EDT> <Error> <HTTP> <BEA-101020> <[ServletContext@60724164[app:whatever3000 module:whatever3000.war path: spec-version:2.5]] Servlet failed with Exception

在WebLogic应用程序正常运行数周后,我突然遇到一个异常:

<Oct 25, 2014 9:31:11 PM EDT> <Error> <HTTP> <BEA-101020>
    <[ServletContext@60724164[app:whatever3000 module:whatever3000.war path:
    spec-version:2.5]] Servlet failed with Exception
    java.lang.ExceptionInInitializerError
java.util.ConcurrentModificationException
        at java.util.Hashtable$Enumerator.next(Hashtable.java:1017)
        at java.util.Hashtable.putAll(Hashtable.java:469)
        at b.CommonStuff.load(CommonStuff.java:55)
        at b.CommonStuff.<clinit>(CommonStuff.java:77)
        at b.Password.<clinit>(Password.java:44)
        at a.doIt(Whatever.java:99)
这是异常的起源:

<Oct 25, 2014 9:31:11 PM EDT> <Error> <HTTP> <BEA-101020>
    <[ServletContext@60724164[app:whatever3000 module:whatever3000.war path:
    spec-version:2.5]] Servlet failed with Exception
    java.lang.ExceptionInInitializerError
java.util.ConcurrentModificationException
        at java.util.Hashtable$Enumerator.next(Hashtable.java:1017)
        at java.util.Hashtable.putAll(Hashtable.java:469)
        at b.CommonStuff.load(CommonStuff.java:55)
        at b.CommonStuff.<clinit>(CommonStuff.java:77)
        at b.Password.<clinit>(Password.java:44)
        at a.doIt(Whatever.java:99)
我不能盲目地尝试,因为它在一家大公司的生产应用程序中。因此,我试图了解我的错误所在,以及如何在午夜重载类时初始化这些变量。

有什么想法吗


这可能是WebLogic类加载器问题吗?

在初始化此类之前,类/实例无法访问某些类的成员。因此,在静态构造函数返回之前,没有人可以访问新创建的
prp
。在
静态{}
块中移动
prp
初始值设定项不会有任何区别。另外,“old”
commontuff
中的“old”
prp
和“new”
prp
没有以任何方式连接(因为“old”和“new”
commontuff
是JVM的不同类)。这一切都使得并发修改
prp
的可能性看起来很奇怪

我相信原因在另一个地方。请注意堆栈跟踪的第一行:异常由
哈希表的
枚举器引发。下面是
putAll
方法的代码(与JDK 8一样,可能多年没有改变):


for(Map.entry)这看起来可能是原因。其他人单独进行了相同的诊断。我添加了clone(),我们将在接下来的几周内看到它是否有效。谢谢。
for (Map.Entry<? extends K, ? extends V> e : t.entrySet())
    put(e.getKey(), e.getValue());