IBM MobileFirst 8搭配WAS 8.5.5.12使用Derby数据源连接报错求助
解决WebSphere 8.5.5.12 + MobileFirst 8 + Derby数据源的DSRA8101E错误
这个问题我之前帮团队排查过,核心根源是Derby驱动的类加载冲突——WebSphere Application Server(WAS)本身内嵌了Derby数据库的驱动,而你的MobileFirst 8服务器大概率自带了另一版本的Derby驱动,两个不同类加载器加载的同类型驱动类被判定为不兼容,就抛出了ClassCastException: org.apache.derby.jdbc.AutoloadedDriver40 incompatible with org.apache.derby.jdbc.InternalDriver。至于MySQL能正常运行,是因为WAS没有内嵌MySQL驱动,MobileFirst带的驱动能被正确加载,不存在冲突。
下面是一步步的排查和解决步骤:
1. 确认驱动版本冲突
- 登录WAS控制台,进入资源 > JDBC > JDBC提供程序,找到WAS自带的Derby提供程序,查看它使用的Derby jar版本(比如
derby.jar、derbyclient.jar的版本信息)。 - 检查MobileFirst安装目录下的Derby相关jar(通常在
MobileFirstServer\lib或类似路径),对比两个版本是否一致。版本不一致的话,冲突几乎是必然的。
2. 移除重复的Derby驱动
最稳妥的做法是让WAS使用自带的Derby驱动,因为WAS对内嵌的驱动做了适配优化:
- 找到MobileFirst安装目录下的Derby jar文件(比如
derby.jar、derbyclient.jar、derbytools.jar等),将它们临时移到其他目录备份。 - 如果你的MobileFirst应用也打包了Derby驱动,也要从应用的
WEB-INF/lib目录中移除这些jar。
3. 修正数据源的驱动类配置
登录WAS控制台,重新配置Derby数据源:
- 进入资源 > JDBC > 数据源,找到你的MobileFirst数据源,点击JDBC提供程序链接。
- 确保JDBC提供程序选择的是WAS自带的Derby类型(比如
Derby Network Server Provider),而不是你手动添加的外部提供程序。 - 验证驱动类名是否正确:对于WAS内嵌的Derby网络驱动,正确的类名是
org.apache.derby.jdbc.ClientDriver,不要手动输入其他驱动类(比如org.apache.derby.jdbc.AutoloadedDriver40)。
4. 调整类加载策略(可选)
如果必须使用MobileFirst自带的Derby驱动,可以调整WAS的类加载顺序:
- 进入服务器 > 服务器类型 > WebSphere应用服务器,选择你的服务器,点击类加载和更新检测。
- 将类加载顺序设置为应用程序类加载器先于父类加载器(Parent Last),这样应用(MobileFirst)自带的驱动会优先被加载。
- 注意:这个设置可能影响其他应用的类加载,建议仅在必要时使用,且充分测试后再上线。
5. 验证并重启
- 配置完成后,在WAS控制台的数据源页面点击测试连接,如果成功说明配置生效。
- 重启WAS服务器,确保所有配置变更和类加载调整完全生效。
按照这些步骤操作后,Derby数据源的连接问题应该就能解决了。
内容的提问来源于stack exchange,提问作者parth.hirpara
相关产品推荐
相关产品推荐

