Notas de la versión de Service Registry 2005Q4

Se produce un error tras crear ExtrinsicObject o ExternalLink con un concepto no válido (6318002)

Resumen del problema: En la Consola Web, si crea un objeto ExtrinsicObject y selecciona un concepto que esté bajo un concepto distinto de ExtrinsicObject, la creación parece que es correcta, pero en realidad se han producido errores. El mismo problema se produce si crea un ExternalLink y selecciona un concepto que esté bajo un concepto distinto de ExternalLink.

Los errores aparecen en el registro del servidor como NullPointerException.

Si el concepto es otro subconcepto bajo RegistryObject, el efecto principal es que el nuevo objeto no se puede encontrar cuando desee buscarlo. Si el concepto está bajo un ClassificationScheme distinto de ObjectType, la base de datos está dañada. Se producen errores de tiempo de ejecución (InvocationTargetException ) al reiniciar el servidor.

El concepto de tipo de objeto debe ser un subconcepto de ExtrinsicObject o de ExternalLink, pero la Consola Web no pone en vigor este requisito.

Solución: Use la herramienta de administración para buscar el objeto o los objetos que utilicen el concepto erróneo. Use el comando select para buscar los objetos y, a continuación, use rm para eliminarlos. Los pasos para realizar esta tarea son los siguientes.

  1. Reinicie Service Registry tal y como se describe en To Stop and Restart the Application Server Domain for the Registry de la Service Registry 3 2005Q4 Administration Guide.

  2. Inicie la herramienta de administración, ya sea como administrador de Registry o como propietario de los objetos dañados, según se indica en Starting the Admin Tool en la Service Registry 3 2005Q4 Administration Guide.

  3. Acceda a la ubicación de nivel superior de la base de datos:


    admin> cd /
    
  4. Use el comando select para que aparezca una lista con los objetos que se deben eliminar. Si inició la herramienta como administrador de Registry, use el siguiente comando (todo en una línea):


    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/%' )
    

    Si inició la herramienta como el propietario de los objetos, use el siguiente comando (todo en una línea):


    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. Use el comando rm para eliminar los objetos. Especifique el URN de cada objeto que se deba eliminar.


    admin> rm urn1 urn2 ...
    
  6. Ejecute el comando select de nuevo para comprobar que los objetos ya no aparezcan en Registry.