問題摘要:在 Web 主控台中,如果您建立 ExtrinsicObject 時選取的概念並非 ExtrinsicObject 的子概念,則建立顯示為成功,但實際已發生錯誤。如果您建立 ExternalLink 時選取的概念並非 ExternalLink 的子概念,則會發生相同錯誤。
該錯誤在伺服器記錄中顯示為 NullPointerException。
如果該概念是 RegistryObject 下的其他子概念,則主要的影響是搜尋新物件時找不到該物件。如果該概念在 ClassificationScheme (而不是 ObjectType) 之下,則會毀壞資料庫。重新啟動伺服器時發生執行階段錯誤 (InvocationTargetException)。
物件類型概念必須是 ExtrinsicObject 或 ExternalLink 概念中的子概念,但 Web 主控台不強制此需求。
解決方法:使用 Admin Tool 尋找使用錯誤概念的某個或多個物件。使用 select 指令尋找物件,使用 rm 刪除物件。此作業的步驟如下:
按照「Service Registry 3 2005Q4 管理指南」中的「停止並重新啟動 Registry 的 Application Server 網域」所述重新啟動 Service Registry。
按照「Service Registry 3 2005Q4 管理指南」中的「啟動 Admin Tool」所述,做為 Registry 管理員或已毀壞物件的所有者啟動 Admin Tool。
移至資料庫中的頂層位置:
admin> cd / |
使用 select 指令列出要移除的物件。如果您做為 Registry 管理員啟動此工具,請使用以下指令 (全部在一行):
admin> select ro.* FROM RegistryObject ro, ClassificationNode cn WHERE ro.objectType = cn.id AND NOT ( cn.path = '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject' or cn.path like '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/%' ) |
如果您做為物件的所有者啟動此工具,請使用以下指令 (全部在一行):
admin> select ro.* FROM RegistryObject ro, ClassificationNode cn, AffectedObject ao, AuditableEvent ae WHERE ro.objectType = cn.id AND ae.user_ = $currentUser AND ao.id = ro.id AND ao.eventId = ae.id AND NOT ( cn.path = '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject' or cn.path like '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/%' ) |
使用 rm 指令刪除物件。指定要刪除之各物件的 URN。
admin> rm urn1 urn2 ... |
再次執行 select 指令以驗證物件已不在 Registry 中。