跳转到内容

WebObjects/EOF/使用EOF/常见陷阱与故障排除

来自维基教科书,自由的教科书

最常见的原因是 EOEditingContextLock,但你也可以通过在 EODatabaseContext 上留下锁来导致问题。要找出你在哪里锁定不当,你需要开始跟踪编辑上下文锁。查看 上下文和数据库锁定 部分以获取更多信息。

子类缺少主键

[编辑 | 编辑源代码]

如果你正在跨 EO 模型进行子类化,并且 EOF 在插入子类时没有在 SQL 中生成主键(结果将是空主键的完整性违反),那么你可能遇到了 EOF 在处理具有轻微不同连接字典的模型时的烦人行为。基本上,EOF 通过比较连接字典来决定何时在多个模型之间共享 EODatabases。但是,ggg 连接字典包含一个名为 jdbc2Info 的大块,其中包含缓存的类型和驱动程序信息。如果你碰巧使用不同的 jdbc 驱动程序版本创建了你的模型,那么该版本号将导致字典不相等。当发生这种情况时,EOF 将每个模型分配给它自己的 EODatabase,这会导致子类实体的 SQL 生成进入最终不会生成主键的代码路径。Chuck Hill 建议在运行时删除 jdbc2Info 以防止此类问题发生。

未找到合适的驱动程序

[编辑 | 编辑源代码]

如果你遇到以下异常

 com.webobjects.jdbcadaptor.JDBCAdaptorException: No suitable driver
       at com.webobjects.jdbcadaptor.JDBCContext.connect(JDBCContext.java:244)
       at com.webobjects.jdbcadaptor.JDBCContext._tryConnect(JDBCContext.java:331)
       at com.webobjects.jdbcadaptor.JDBCContext._channelWillOpen(JDBCContext.java:468)
       at com.webobjects.jdbcadaptor.JDBCChannel.openChannel(JDBCChannel.java:81)

很有可能是你的类路径不正确。EOF 中的数据库支持有两部分,JDBC 驱动程序和数据库插件。你必须确保这两者都在你的类路径中。例如,在 FrontBase 上,你必须在你的类路径中同时包含 frontbasejdbc.jar 和 frontbaseplugin.jar(来自 FrontBasePlugin.framework)。

华夏公益教科书