问题摘要:在 Web 控制台中,如果您创建了一个 ExtrinsicObject 并选择了不属于 ExtrinsicObject 的概念的概念,则创建看上去成功了,但实际上出现了错误。当您创建了 ExternalLink 并选择了不属于 ExternalLink 的概念的概念时,也会出现该问题。
在服务器日志中,这些错误显示为 NullPointerException。
如果概念是属于 RegistryObject 的另一个子概念,则主要影响是搜索新对象时找不到新对象。如果概念是属于 ClassificationScheme 而不是 ObjectType,则将损坏数据库。当您重新启动服务器时,出现运行时错误 (InvocationTargetException)。
对象类型概念必须是 ExtrinsicObject 或 ExternalLink 概念中的子概念,但 Web 控制台并不强制此要求。
解决方法:使用管理工具查找使用了错误概念的对象。使用 select 命令查找对象,并使用 rm 删除它们。该任务的步骤如下。
按《Service Registry 3 2005Q4 管理指南》中的“停止并重新启动用于 Registry 的 Application Server 域”所述重新启动 Service Registry。
按《Service Registry 3 2005Q4 管理指南》中的“启动管理工具”所述以注册表管理员或损坏对象的拥有者身份启动管理工具。
转至数据库中的顶层位置:
admin> cd / |
使用 select 命令列出要删除的对象。如果您是以注册表管理员身份启动了该工具,则使用以下命令(全部在一行):
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 中。