跳转到内容

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)都放在您的类路径中。

华夏公益教科书