跳轉到內容

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

華夏公益教科書