Control del Ciclo de Vida
Esta sección especifíca aquellos aspectos del API JAXR que tratan con el control del ciclo de vida de las entradas de
registro (metadata) los ítems del repositorio (contentido). Los interfaces para el control del ciclo de vida están
diseñados para ser usados por Organizaciones Enviantes (SO) o el publicador de metadatos o contenido.
|
[Nota]
Las peticiones de control del ciclo de vida son operaciones privilegiadas que requieren autentificación y autorización.
Los aspectos de seguridad sobre el control del ciclo de vida se explican en el capítulo
Arquitectura de Seguridad.
|
Asignación de Clave Única
Como se especificó en el modelo de información, cada RegistryObject del registro tiene una
clave única. Esta clave normalmente es generada por el proveedor de registro. Algunos proveedores de registros, como
ebXML, opcionalmente permiten al emisor especificar esta clave única.
El API JAXR permite al cliente especificar una clave para un RegistryObject cuando lo envía
al registro. La clave suministrada por el cliente debe usarse como la clave para el objeto dentro del proveedor de
registro objetivo, si se cumplen todas estas condiciones:
- El cliente suministra una clave.
- La clave cumple el formato de una URN según lo especifica la "DCE 128 bit UUID" (por ejemplo,
urn:uuid:a2345678-1234-1234-123456789012).
- El proveedor de registros soporta las claves suministradas por el cliente.
Un proveedor JAXR debe ignorar las claves suministradas por el cliente si no se cumple alguna de las condiciones anteriores.
En este caso, el proveedor de registro debe generar una clave única.
Interface LifeCycleManager
El API JAXR proporciona un interface común LifeCycleManager. Este interface tiene un método
factoría llamado createObject, que lo usan los clientes para crear diferentes tipos de objetos
definidos por el modelo de información.
El interface LifeCycleManager es el interface base común para dos subinterfaces especializados:
- Interface BusinessLifeCycleManager
- Interface GenericLifeCycleManager
Interface BusinessLifeCycleManager
El interface BusinessLifeCycleManager define un API sencillo de nivel de negocio que proporciona
la habilidad de explícitamente enviar, actualizar o borrar ejemplares de los interfaces de alto nivel más importantes en el
modelo de información. Estos interfaces de alto nivel incluyen:
- Interface Organization
- Interface Service
- Interface ServiceBinding
- Interface Concept
Capacidad Nivel: 0
Se requiere que este interface sea implementado por todos los proveedores JAXR.
| Sumario de Métodos |
|
deleteConcepts(java.util.Collection conceptKeys) |
Borra los Concepts correspondientes a las claves especificadas. |
deleteOrganizations(java.util.Collection organizationKeys) |
Borra los Organizations correspondientes a las claves especificadas. |
deleteServiceBindings(java.util.Collection bindingKeys) |
Borra los ServiceBindings correspondientes a las claves especificadas. |
deleteServices(java.util.Collection serviceKeys) |
Borra los Services correspondientes a las claves especificadas. |
saveConcepts(java.util.Collection concepts) |
Graba los Concepts especificados. |
saveOrganizations(java.util.Collection organizations) |
Graba las Organizations especificadas. |
saveServiceBindings(java.util.Collection bindings) |
Graba los ServiceBindings especificados. |
saveServices(java.util.Collection services) |
Graba los Services espeificados. |
Métodos Save
El interface BusinessLifeCycleManager define un conjunto de métodos
save, uno por cada interfacce clave (por ejemplo,
saveOrganizations etc.). Cada método save toma un
Collection como parámetro para que pueda grabar varios objetos del tipo asociado con el
método save. La Collection contiene objetos que son
ejemplares del tipo asociado con el método save. Por ejemplo, el método
saveOrganizations acepta una Collection de ejemplares
Organization. Si la Collection contiene objetos cuyo
tipo no corresponde con el método save, la implementación debe lanzar una
UnexpectedObjectException.
Create contra Update
Los métodos save soportan la creacción de nuevos objetos así como la actualización
del estado de los objetos existentes dentro del registro. Los clientes llaman al método save
en cualquiera de estos caso.
Grabación Implícita de Objetos
Un proveedor JAXR debe atravesar referencias de objetos desde el objeto que está siendo grabado y salvarlo implícitamente.
Por ejemplo, si el cliente graba explícitamente una Organization, el proveedor
JAXR debe implícitamente grabar cualquier Packages, ExternalLinks,
ExternalIdentifiers, Concepts,
Services, ServiceBindings, etc., que sean alcanzables desde el
Organization que está siendo grabado.
Interface BulkResponse
El interface BulkResponse es devuelto por muchos otros métodos del API donde la respuesta
necesite incluir una Collection de objetos. El interface BulkResponse
se describe aquí en el contexto de los métodos save, aunque su comportamiento es similar
cuando se usa en otros contextos.
Cada método save devuelve un ejemplar BulkResponse. Este interface
contiene una Collection de claves a las que se accede mediante el método
getCollection. Estas claves son para aquellos objetos que fueron grabados satisfactoriamente.
El BulkResponse también podría contener una colección de ejemplares
SaveException como se describe posteriormente.
Interface SaveException
En el caso de un éxito parcial donde sólo se pudo grabar satisfactoriamente un subconjunto de objetos, el método
getStatus del BulkResponse debe devolver
JAXRResponse.STATUS_WARNING. En este caso, se incluirá una Collection
de ejemplares SaveException en el ejemplar BulkResponse. Las
SaveExceptions proporcionan información sobre cada error que evitó que se grabaran algunos objetos
del método save.
Observa que las SaveExceptions son devueltas como parte del
BulkResponse, en lugar de ser lanzadas, para permitir que la
BulkResponse sea devuelta a pesar de la excepción.
Métodos Delete
El interface BusinessLifeCycleManager define un conjunto de métodos
delete, uno para cada interface clave (por ejemplo,
deleteOrganizations, etc.). Cada método delete toma una
Collection como parámetro para poder borrar varios objetos del tipo asociado con el método
delete. La Collection es homogénea y contiene claves de
objetos que están siendo borrados. Por ejemplo, el método deleteOrganizations acepta una
Collection de ejemplares Key donde cada
Key es la clave de un ejemplar Organization. Si la
Collection contiene una clave cuyo tipo de objeto no corresponde con el método
delete, la implementación debe lanzar una UnexpectedObjectException.
Interface DeleteException
Esta excepción se usa en el caso de un fallo o un éxito parcial durante la operación de borrado. Se devolverá una
Collection de ejemplares de esta excepción en el BulkResponse
para una llamada al método delete si se encuentra una excepción.
Interface GenericLifeCycleManager
El interface GenericLifeCycleManager proporciona un API genérico más flexible que proporciona
la habilidad para grabar (crear o actualizar), caducar, y borrar ejemplares de cualquier interface del modelo de información
junto con el valor de si el cliente está autorizado para realizar la acción.
Como proporciona más funcionalidades usando menos métodos que BusinessLifeCycleManager,
el GenericLifeCycleManager podría ser un API menos obvio para algunos.
Capacidad Nivel: 1
Se requiere que este interface sea implementado por los proveedores del Nivel 1 de capacidad o superior.
| Sumario de Métodos |
|
deleteObjects(java.util.Collection keys) |
Borra uno o más objetos del registro previamente enviados. |
deprecateObjects(java.util.Collection keys) |
Caduca uno o más objetos del registro previamente enviados. |
saveObjects(java.util.Collection cataloguedObjects) |
Graba uno o más objetos del registro previamente enviados. |
Interface CataloguedObject
Un CataloguedObject es un simple interface envoltura que contiene un
RegistryEntry y un ítem de repositorio opcional representado por una subclase de
java.lang.Object. Como las Collection son ejemplares
uniformes de CataloguedObject, cada CataloguedObject
podría conteneer ejemplares heterogéneos de RegistryEntry e ítems de repositorio.
Grabar Objetos
public BulkResponse saveObjects(java.util.Collection cataloguedObjects)
throws JAXRException
El método saveObjects se usa para crear o actualizar metadatos y contenido. Este método
graba una Collection uniforme de ejemplares CataloguedObject
en el registro. Las implementaciones deben atravesar las referencias de objetos desde el objeto que está siendo grabado
y salvarlas implícitamente. Ese método es similar a los métodos save de
BusinessLifeCycleManager.
Caducar Objetos
public BulkResponse deprecateObjects(java.util.Collection keys)
throws JAXRException
El método deprecateObjects se usa para caducar ejemplares de
RegistryEntry previamente enviados.
Este método especifica una Collection uniforme de ejemplares Key
identificando objetos pre-existentes en el registro. Caducar un objeto lo marca como obsoleto. Un objeto caducado permanece en
el registro durante algún tiempo antes de ser borrado.
Una vez que se ha caducado un objeto, el proveedor JAXR no debe permitir que se envíen nuevas referencias (por ejemplo, nuevas
Associations, Classifications y
ExternalLinks) a ese objeto. Si un cliente hace una llamada al API que resulta en una
nueva referencia a un objeto caducado, el proveedor JAXR debe lanzar una
java.lang.IllegalStateException dentro de una JAXRException.
Sin embargo, las referencias existentes hacia un objeto caducado continuaran funcionando normalmente.
Borrar Objetos
public BulkResponse deleteObjects (java.util.Collection keys, int deletionMode)
throws JAXRException
El método deleteObjects se usa para borrar ejemplares de RegistryEntry
previamente enviaddos.
Este método especifica una Collection uniforme de ejemplares Key
que identifican objetos pre-existentes en el registro.
Un intento de eliminar un RegistryEntry mientras todavía es objetivo de referencias
podría resultar en una InvalidRequestException que es devuelta dentro de la
BulkResponse, si el proveedor de registros fuerza dichas restricciones de borrado.