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)。