Service Registry 3 2005Q4 发行说明

创建使用无效概念的 ExtrinsicObjectExternalLink 后出现错误 (6318002)

问题摘要:在 Web 控制台中,如果您创建了一个 ExtrinsicObject 并选择了不属于 ExtrinsicObject 的概念的概念,则创建看上去成功了,但实际上出现了错误。当您创建了 ExternalLink 并选择了不属于 ExternalLink 的概念的概念时,也会出现该问题。

在服务器日志中,这些错误显示为 NullPointerException

如果概念是属于 RegistryObject 的另一个子概念,则主要影响是搜索新对象时找不到新对象。如果概念是属于 ClassificationScheme 而不是 ObjectType,则将损坏数据库。当您重新启动服务器时,出现运行时错误 (InvocationTargetException)。

对象类型概念必须是 ExtrinsicObjectExternalLink 概念中的子概念,但 Web 控制台并不强制此要求。

解决方法:使用管理工具查找使用了错误概念的对象。使用 select 命令查找对象,并使用 rm 删除它们。该任务的步骤如下。

  1. 《Service Registry 3 2005Q4 管理指南》中的“停止并重新启动用于 Registry 的 Application Server 域”所述重新启动 Service Registry。

  2. 《Service Registry 3 2005Q4 管理指南》中的“启动管理工具”所述以注册表管理员或损坏对象的拥有者身份启动管理工具。

  3. 转至数据库中的顶层位置:


    admin> cd /
    
  4. 使用 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/%' )
    
  5. 使用 rm 命令删除对象。指定要删除的每个对象的 URN。


    admin> rm urn1 urn2 ...
    
  6. 再次运行 select 命令验证这些对象是否已不在 Registry 中。