Oracle Application Testing Suite 12.5.0.2Sample MedRec无法访问问题

在win7上安装完OAS之后,启动medrec示例程序发现只能打开首页,当登录的时候会报数据源找不到的错误,这是因为weblogic内置的derby数据库没有启动成功造成的。


手工启动derby数据库报如下错误:

2016-03-05 14:31:33.948 GMT : 已使用基本服务器安全策略安装了安全管理程序。
2016-03-05 14:31:34.182 GMT : access denied ("java.net.SocketPermission" "localh
ost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission"
 "localhost:1527" "listen,resolve")
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkListen(Unknown Source)
        at java.net.ServerSocket.bind(Unknown Source)


经过搜索,发现是“Java 7u51版安全管理器的默认权限有变化,之前允许绑定>1024的端口,现在下限更高。所以derby使用的1527端口被拒绝绑定。

官方文档:http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html


解决办法如下:

修改OracleATS\jdk\jre\lib\security目录下的java.policy 并添加如下内容:

grant {

   ...

   permission java.net.SocketPermission "localhost:1527", "listen,resolve";

}


然后重启MedRec示例程序即可


<think>好的,我现在需要帮助用户解决Derby数据库的ERROR XJ040错误,具体是类加载器无法启动数据库'medrec'的问题。首先,我要回顾用户提供的引用内容,尤其是引用[1]和引用[2]。用户提到的错误信息显示另一个Derby实例可能已经启动了数据库,导致当前无法启动,错误代码是XJ040,ERRORCODE 40000。 首先,我需要确定这个错误的常见原因。根据引用[1]中的描述,错误提示指出另一个Derby实例可能已经启动了数据库,因此当前实例无法再次启动。这种情况通常发生在多个进程或线程尝试同时访问同一个Derby数据库,而Derby是单实例的,同一时间只能有一个实例访问数据库。此外,用户提供的引用[2]中的解决方案是删除Derby的日志文件和metastore_db目录,以及HDFS上的相关目录,这说明可能是残留文件导致的问题。 接下来,我需要考虑可能的解决方案。首先,检查是否有其他正在运行的Derby实例或Java进程占用了该数据库,如果有,需要终止这些进程。然后,检查数据库目录下的文件是否被锁定或损坏,可能需要删除lock文件和临时文件。另外,用户可能需要清理旧的数据库文件,如metastore_db和derby.log,并重新初始化数据库。同时,需要注意文件权限问题,确保应用程序有权限访问数据库目录。最后,如果数据库文件损坏,可能需要从备份恢复,或者重新创建数据库。 另外,我需要验证这些步骤是否适用于用户提到的数据库'medrec',而不仅仅是示例中的'metastore_db'。用户需要将步骤中的数据库名称替换为'medrec'。例如,删除metastore_db和derby.log可能对应到用户的情况是删除'medrec'相关的文件,但需要确认具体的数据库文件结构。Derby数据库通常以目录形式存在,所以用户应检查是否存在名为'medrec'的目录,并删除其中的文件或整个目录。 还需要提醒用户在进行这些操作前备份数据,以免误删重要文件。另外,检查应用程序的配置,确保没有多个实例尝试同时访问同一个数据库,或者配置了正确的数据库路径。可能用户的环境变量或配置文件指向了错误的数据库路径,导致多个实例冲突。 总结来说,解决方案应包括终止现有进程、清理残留文件、检查权限、重新初始化数据库,以及检查配置。同时,用户需要根据具体的数据库名称调整步骤中的目录和文件名。</think>关于Derby数据库ERROR XJ040错误(ERRORCODE 40000)的解决方案如下: ### 问题分析 该错误提示"无法使用类加载程序启动数据库'medrec'",通常由以下原因导致: 1. **数据库文件被锁定**:另一个Derby实例正在访问数据库目录$[^1]$ 2. **残留文件冲突**:数据库目录中存在未清理的临时文件或日志文件$[^2]$ 3. **权限问题**:应用进程对数据库目录缺少读写权限 ### 分步解决方案 1. **终止现有进程** ```bash # 查找占用Derby的Java进程 jps -l | grep derby kill -9 <进程ID> ``` 强制关闭所有可能访问`medrec`数据库的Java进程$[^1]$ 2. **清理残留文件** ```bash # 删除数据库目录及日志文件(注意备份重要数据) rm -rf medrec/ derby.log ``` 该操作会清除数据库锁文件和临时文件$[^2]$ 3. **检查文件权限** ```bash # 确保当前用户有目录权限 chmod -R 755 /path/to/medrec_db_parent/ ``` 4. **重新初始化数据库** ```java // 连接时应显式指定create参数 String url = "jdbc:derby:medrec;create=true"; ``` 5. **配置验证** - 检查数据库URL是否指向唯一路径 - 确认应用未配置多个数据源指向同一数据库 - 验证JDBC驱动版本(推荐使用Derby 10.15+) ### 预防措施 ```xml <!-- 配置连接池时添加防冲突参数 --> <property name="shutdownDatabase" value="true"/> <property name="dropDatabase" value="true"/> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值