gpt4 book ai didi

class - Linux 中抛出 IllegalAccessError ( suse 10)

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:06 26 4
gpt4 key购买 nike

在此处输入代码我们使用 c3p0 jar 进行数据库池。现在,从 c3p0 代码中,出现以下异常

引起:java.lang.IllegalAccessError:尝试从类 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 访问类 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource$1 在 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.setUpPropertyEvents(AbstractPoolBackedDataSource.java:74) 在 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource。(AbstractPoolBackedDataSource.java:63) 在 com.mchange.v2.c3p0.ComboPooledDataSource。(ComboPooledDataSource.java:109) 在 com.mchange.v2.c3p0.ComboPooledDataSource.(ComboPooledDataSource.java:105)

现在位于 AbstractPoolBackedDataSource.java(第 74 行)PropertyChangeListener l = new PropertyChangeListener()

PropertyChangeListener l = new PropertyChangeListener()
{
public void propertyChange( PropertyChangeEvent evt )
{ resetPoolManager(); }
};

所以,PropertyChangeListener是这里的内部类.. AbstractPoolBackedDataSource$1PropertyChangeListener 是一个 java 类 java.beans.PropertyChangeListener !!

可能是什么原因?这仅发生在 linux(suse 10) 中。在 Windows 中它工作正常(jdk 1.6_10 和 jre 1.6_20)。我尝试过不同的 jdk、jre 组合(jdk 1.6_25 等)

最佳答案

我通过一些尝试和错误解决了这个问题。

我还发现,这并不像我之前怀疑的那样可靠。这很容易重现,看起来像是一个潜在的类加载错误。(尽管我不确定它是在 Equinox 实现中还是在 Java 中!!)。

在解释解决方案之前,让我更详细地描述一下场景。

我们已将代码部署在 osgi(equinox) 框架中。有两个包使用 c3p0 jar 进行数据库池,其中之一导出 c3p0 包。该 bundle 先于另一个 bundle 启动。

现在,根据 osgi 规范,osgi 类加载器应该为单独的包维护单独的类加载器实例。现在,当第二个包尝试从 c3p0 jar 加载类时,它的类加载器可能会发现(从父委托(delegate))这些类已经加载了!但它们是从不同的上下文加载的,这导致了访问冲突。

这是初步发现,我将尝试使用 Eclipse 代码进行调试,并可能会深入研究它。更改 bundle 启动顺序后,此问题已解决。

关于class - Linux 中抛出 IllegalAccessError ( suse 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7873753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com