Java 非法状态例外:Can';t覆盖番石榴地图中的原因

Java 非法状态例外:Can';t覆盖番石榴地图中的原因,java,jboss,guava,Java,Jboss,Guava,我使用 new MapMaker().softValues().maximumSize(cacheSize).makeMap(); 这似乎很好,但是,在服务器上部署并将新元素放入映射之后,我有时会在访问之后遇到以下异常: java.lang.IllegalStateException: Can't overwrite cause at java.lang.Throwable.initCause(Throwable.java:320) at org.jboss.mx.loading.Re

我使用

new MapMaker().softValues().maximumSize(cacheSize).makeMap();
这似乎很好,但是,在服务器上部署并将新元素放入映射之后,我有时会在访问之后遇到以下异常:

java.lang.IllegalStateException: Can't overwrite cause
  at java.lang.Throwable.initCause(Throwable.java:320)
  at org.jboss.mx.loading.RepositoryClassLoader.findClass(RepositoryClassLoader.java:624)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
  at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:474)
  at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
  at com.google.common.collect.CustomConcurrentHashMap$2.iterator(CustomConcurrentHashMap.java:828)
  at java.util.AbstractCollection.remove(AbstractCollection.java:241)
  at com.google.common.collect.CustomConcurrentHashMap$Segment.removeFromChain(CustomConcurrentHashMap.java:2599)
  at com.google.common.collect.CustomConcurrentHashMap$Segment.processPendingCleanup(CustomConcurrentHashMap.java:2772)
  at com.google.common.collect.CustomConcurrentHashMap$Segment.runLockedCleanup(CustomConcurrentHashMap.java:2860)
  at com.google.common.collect.CustomConcurrentHashMap$Segment.preWriteCleanup(CustomConcurrentHashMap.java:2806)
  at com.google.common.collect.CustomConcurrentHashMap$Segment.put(CustomConcurrentHashMap.java:2374)
  at com.google.common.collect.CustomConcurrentHashMap.put(CustomConcurrentHashMap.java:3346)
  at my.app.cache.CacheImplGoogleGuava.put(CacheImplGoogleGuava.java:36)
...
原因可能是什么

---更新:

JBoss版本是5

在Throwable.initCause中设置断点显示
ClassNotFoundException
,并显示以下消息:
com.google.common.collect.Iterators的已销毁类加载器的使用无效,UCL已销毁位置:
还有Stacktrace

ClassNotFoundException(Throwable).initCause(Throwable):320
UnifiedClassLoader3(RepositoryClassLoader).findClass(String):628
...
UnifiedClassLoader3(ClassLoader).loadClass(String):248
CustomConcurrentHashMap$2.iterator():828
CustomConcurrentHashMap$2(AbstractCollection<E>).remove(Object):241
CustomConcurrentHashMap$Segment.enqueueCleanup(...):2738
CustomConcurrentHashMap$Segment.unsetValue(...):2662
CustomConcurrentHashMap<K, V>.reclaimValue(...)
CustomConcurrentHashMap$SoftValueReference<K, V>.finalizeReferent():1637
...
Method.invoke:574
Finalizer.claenUp:154
Finalizer.run:127
ClassNotFoundException(Throwable).initCause(Throwable):320
UnifiedClassLoader3(RepositoryClassLoader).findClass(字符串):628
...
UnifiedClassLoader3(类加载器).loadClass(字符串):248
CustomConcurrentHashMap$2.iterator():828
CustomConcurrentHashMap$2(AbstractCollection).remove(对象):241
CustomConcurrentHashMap$Segment.enqueueCleanup(…):2738
CustomConcurrentHashMap$段。未设置值(…):2662
CustomConcurrentHashMap.ReceiveValue(…)
CustomConcurrentHashMap$SoftValueReference.FinalizerReferent():1637
...
方法调用:574
定稿人:克拉努普:154
终结器。运行时间:127

从stacktrace上看,似乎地图中的一个对象在
finalizeReferent
com.google.common.collect.Iterators
无法加载的地方被最终确定了。

您的问题似乎与
MapMaker
或番石榴一般无关

您只能看到在处理另一个异常时发生的异常(不幸的是)

Throwable.initCause()
在当前
Throwable
已指定原因时调用时抛出异常(通过方法或构造函数)

RepositoryClassLoader.findClass()
方法似乎正在处理一些它希望没有原因的异常,但事实上它已经有了一个原因集,这会触发此异常

不幸的是,您在这里看到的异常隐藏了实际的异常(这对于解决问题可能更重要)


尝试在第320行或第624行的RepositoryClassLoader.findClass()中的
Throwable.initCause()
处放置一个断点,并重现问题以(希望)看到“真实”IDE的local variables视图中出现异常。

这似乎是一个已知的JBoss错误,可能已经在新版本的平台中解决了。这里至少有一个类似的错误:


你可以尝试升级你的JBoss版本(尽管这个特定的bug暗示修复是在2006年)或者,如果您的版本是最新的,则提交另一个错误。可能是修复不周,只修复了该错误的作者报告的一个案例,而不是类似的案例。

这似乎更像是JBoss问题,而不是Guava问题。您碰巧遇到了Guava代码。如果我理解正确,original异常是“隐藏”的,它来自一个未完全解决的JBoss错误552然而,似乎有一个原因在番石榴中的某个地方,不是吗?@stacktracer:这可能是由番石榴中的某个东西引起的,但我从未见过那个错误消息,它似乎是JBoss特有的。