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