跳轉到內容

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

華夏公益教科書