德比非法访问错误
Posted
技术标签:
【中文标题】德比非法访问错误【英文标题】:Derby IllegalAccessError 【发布时间】:2012-09-15 04:22:13 【问题描述】:尝试使用 Hibernate、JPA 和嵌入式 Derby 组装一个非常小的 JPA 测试应用程序。从 Derby 获取 IllegalAccessError,我无法解决或在 Internet 上找到可用信息:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.derby.jdbc.EmbeddedDriver.boot()V from class org.apache.derby.jdbc.AutoloadedDriver
derby.jar 10.9.1.0 在类路径中。
我已经为我的 Oracle XE 实例成功设置了一个类似的 persistence.xml,它运行良好。
我没有运行任何 derby 网络服务器。我已遵循 derby 安装说明并验证了安装。我使用 derby "ij" 命令行工具创建了我的数据库(名为 "swift")。
我无法理解这个例外,我肯定会欣赏一些新的眼睛。
缩写堆栈跟踪:
INFO: HHH000401: using driver [org.apache.derby.jdbc.EmbeddedDriver] at URL [jdbc:derby:localhost:1527/swift:create-true]
Sep 14, 2012 11:12:00 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: user=swift, password=****, autocommit=true, release_mode=auto
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.derby.jdbc.EmbeddedDriver.boot()V from class org.apache.derby.jdbc.AutoloadedDriver
at org.apache.derby.jdbc.AutoloadedDriver.getDriverModule(Unknown Source)
at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
PERSISTENCE.XML:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns /persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.gdeb.swift.NIIN</class>
<class>com.gdeb.swift.RIC</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="hibernate.connection.url" value="jdbc:derby:/swift:create-true" />
<property name="hibernate.connection.username" value="swift" />
<property name="hibernate.connection.password" value="swift" />
</properties>
</persistence-unit>
</persistence>
【问题讨论】:
【参考方案1】:这有点像在黑暗中拍摄,但希望它能为您指明正确的方向。 IllegalAccessError 表示一个类试图调用另一个类中不允许访问的方法(例如私有方法)。显然,在正常情况下,这会在编译时被阻止,但有几种方法可以在运行时出现。具体来说:
如果调用者和被调用者是不同的版本,并且方法在一个版本中是公共的,而在另一个版本中是私有的 如果调用者和被调用者由不同的类加载器加载,并且它是一个包保护方法。在这种情况下,这些包可能被认为是不同的,因为它们是在不同的类加载器中加载的。一些快速的谷歌搜索表明,在 derby 中引导方法的可见性发生了变化。特别是在10.0 中它是私有的,而在10.1.2.1 中它是包保护的,并从 AutoloadedDriver 调用。
基于此,我会说您受到第一个案例的打击。看看你是否能找到不止一个版本的 Derby。 AutoloadedDriver 很可能是从一个版本的 derby 加载的,而 EmbeddedDriver 是从另一个用于早期版本的 Derby 的 jar 加载的。
如果是这种情况,请从类路径中删除旧版本的 Derby。
【讨论】:
请注意,Derby 的副本通常与其他 Java 软件包捆绑在一起,例如应用服务器和其他中间件,甚至 JDK 本身,因此很容易将其他版本的 Derby 放入您的在不知不觉中安装。以上是关于德比非法访问错误的主要内容,如果未能解决你的问题,请参考以下文章
安全错误。在 php 中使用 ccavenue 检测到非法访问
如何修复 Hadoop 警告:在 Ubuntu 上发生非法反射访问操作错误
使用存储在另一个数组中的数组索引时,Cuda 非法内存访问错误