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