Arquitectura
Este capítulo describe la arquitectura de alto nivel de JAXR y presenta algunos de los interfaces principales.
La siguiente figura muestra una vista de alto nivel de la arquitectura JAXR, a la que nos referiremos muy frecuentemente dentro
de esta especificación.
Figura 5: Arquitectura JAXR.
Los círculos representan los distintos interfaces implementados por el cliente y el proveedor JAXR:
- RC representa el interface RegistryClient implementado por el cliente.
- RS representa el interface RegistryService implementado por el proveedor
JAXR.
- C1, C2 hasta Cn representan los interfaces JAXR implementados
por el proveedor JAXR que proporcionan distintas capaciades de Registro. Estos interfaces se presentarán más adelante en esta
especificación.
|
[Nota]
Se espera que el cliente y el proveedor JAXR estén localizados dentro del mismo proceso de la JVM en la mayoría de las
implementaciones. El único punto de distribución sobre la Web está entre el proveedor JAXR y el proveedor del registro (entre
las capas central e inferior).
|
En las secciones siguientes, se describirá cada componente de la configuración JAXR en un orden de arriba hacia abajo. La mayoría
de las descripciones están acompañadas por una versión minimizada de la figura anterior. La figura minimizada destaca el
componente que se está describiendo acentuado con una flecha y sombreándolo en color rojo.
Cliente JAXR
La parte superior de la figura anterior es el cliente JAXR. El cliente JAXR puede ser cualquier aplicación independiente
Java, un Applet o un componente J2EE. El cliente JAXR utiliza el API JAXR para acceder a un registro mediante un proveedor JAXR.
Interface Connection
Figura 6: Interface Connection
Un objeto Connection (señalado por flecha en la figura anterior) representa una sesión del
cliente con un proveedor JAXR. Mantiene la información de estado para una conexión específica.
Un cliente debe crear un Connection JAXR sobre un proveedor JAXR apropiado para emplear los
servicios de un registro que usa el API JAXR. El capítulo Control de Conexión
describe el papel de las conexiones en más detalle.
El cliente usa el interface ConnectionFactory de JAXR para crear una
Connection. La Connection JAXR no se muestra explícitamente en
la figura 5. Sin embargo, los interfaces RegistryClient y
RegistryService definidos por el API JAXR están contenidos dentro de una conexión JAXR.
El interface Connection proporciona varios métodos seleccionadores (por ejemplo,
setLocale, setSynchronous,
setCredentials) que permiten que el cliente JAXR altere dinámicamente su estado, contexto, y
preferencias sobre el proveedor JAXR en cualquier momento.
Interface RegistryClient
Figura 7: Interface RegistryClient
El cliente JAXR debe implementar un interface RegistryClient (señalado por la flecha en la
figura 7) si utiliza comunicación asíncrona con el proveedor JAXR. El interface RegistryClient
esta representado por el círculo etiquetado RC en la figura 5.
Un RegistryClient sirve como un proxy para el cliente JAXR desde la perspectiva del proveedor
JAXR. Un cliente JAXR puede implementar cualquier número de interfaces RegistryClient.
Sin embargo, solamente un interface RegistryClient puede asociarse con una
Connection dada a un proveedor JAXR. Si un cliente utiliza el mismo ejemplar de
RegistryClient para múltiples Connections, debe asegurarse de
que la implementación de RegistryClient sea segura ante los threads.
El interface RegistryClient proporciona los métodos de servicio de retrollamada para entregar
respuestas asíncronas y excepciones desde el proveedor JAXR al cliente JAXR. El proveedor JAXR invoca asíncronamente a estos
métodos de servicio de retrollamada si el cliente prefiere notificación asíncrona.
Los métodos de entrega asíncrona son:
- El método onException se usa para entregar excepciones asíncronas.
- El método onResponse se usa para entregar respuestas asíncronas.
Interface RegistryService
Figura 8: Interface RegistryService
Interface RegistryService (señalado por la flecha la figura 8) es el interface principal
implementado por un proveedor JAXR. Un cliente del registro puede conseguir este interface desde su conexión a un proveedor JAXR.
El proveedor JAXR debe implementar un interface RegistryService
El interface RegistryService proporciona los métodos que son utilizados por el cliente para
descubrir los distintos interfaces específicos de la capacidad implementados por el proveedor JAXR. También proporciona un
método getCapabilityProfile que permite que el cliente JAXR tenga acceso al perfil de
capacidad que describe las capacidades utilizadas por el proveedor JAXR.
Interfaces Específicos de Capacidad
Figura 9: Interfaces Específicos de la Capacidad
Los interfaces específicos de la capacidad (apuntados por la flecha de la Figura 9) proporcionan capacidades específicas
como:
Cada interface especifico de la capacidad se mapea en un perfil de capacidad definido por el JAXR. Actualmente estos perfiles
de capacidad están definidos como perfiles de Nivel 0 y de Nivel 1. Los interfaces específicos de la capacidad normalmente están
disponibles en dos sabores: un interface de negocios y un interface genérico.
El Proveedor JAXR
Figura 10: Proveedor JAXR
El proveedor JAXR (apuntado por la flecha en la figura 10) es una implementación del API JAXR. Un cliente JAXR accede a un
registro mediante un proveedor JAXR.
La figura 5 muestra al proveedor JAXR como la unión de un proveedor JAXR genérico y un provedor JAXR específico del registro.
Proveedor JAXR Enchufable
El proveedor enchufable JAXR implementa las características del API JAXR que son independientes de cualquier tipo específico
de registro. El proveedor enchufable proporciona una sola abstracción para varios proveedores JAXR específicos de registro.
Permite al cliente evitar ser expuesto al hecho de que allí hay varios proveedores JAXR específicos de registro realizando
el acceso real al registro.
Una importante característica del proveedor JAXR enchufable es proporcionar una implementación de
ConnectionFactory enchufable para poder crear Connections
utilizando el proveedor JAXR específico del registro apropiado.
Proveedor JAXR Específico del Registro
Los proveedores JAXR específicos del registro implementan el API JAXR de una forma específica del registro. Un proveedor
específico del registro JAXR se enchufa dentro de un proveedor JAXR enchufable y es utilizado por éste en un patrón de
delegación. El contrato entre el proveedor enchufable JAXR y un proveedor específico del registro JAXR es el API JAXR
usado en un patrón de delegación en vez de un SPI separado o diferente.
un proveedor específico del registro JAXR acepta peticiones JAXR del cliente y las transforma en peticiones equivalentes
basadas en las especificaciones del registro objetivo. Envía las peticiones específicas del registro al proveedor de
registro usando protocolos específicos del registro.
Un proveedor de registro procesa una petición del cliente y envía una respuesta específica del registro de vuelta al
proveedor específico del registro JAXR. Entonces el proveedor específico del registro JAXR transforma la respuesta
específica del registro en una respuesta equivalente JAXR que se entregua al cliente JAXR.
Desde la perspectiva del proveedor del registro, su cliente es el proveedor JAXR específico del registro.
Proveedor Puente JAXR
Es probable que la mayoría de los proveedores JAXR sean desarrollados como puentes a los proveedores de registro
existentes. Dichos proveedores JAXR son referenciados como proveedores puente JAXR. Esto es similar al concepto de puente
JDBC-ODBC en la implementación de referencia de JDBC. Un proveedor puente no es específico a ningún ejemplar determinado de
registro. En su lugar, un proveedor puente es específico a un tipo de registros (por ejemplo, ebXML) y se puede utilizar
para acceder a cualquier ejemplar de registro que cumpla con la especificación que define ese tipo de registros.
Por ejemplo, un proveedor puente de ebXML da acceso a cualquier implementación que cumpla con la especificación ebXML.
Proveedor de Registro
Los proveedores de registro se mostraron en la capa inferior de la figura 5. Estas son implementaciones de varias
especificaciones de registro como ebXML y UDDI.
Estructura de Paquetes del API JAXR
El API JAXR está divido en dos paquetes principales:
- El paquete java.xml.registry.infomodel consta de interfaces que definen el modelo
de información de JAXR. Estos interfaces definen los tipos de objetos que residen en un registro y cómo se relacionan
unos con otros. El modelo de información se discute en la página siguiente.
- El paquete java.xml.registry consta de los interfaces y clases del API que definen
el interface de acceso al registro.
Mientras que el modelo de información describe qué tipos de objetos residen en el registro, el API define cómo esos objetos
se envían al registro y se manejan posteriormente. La Figura 11 muestra los interfaces y las clases definidas por el API
JAXR según lo definido por el paquete java.xml.registry. Los interfaces del modelo de información
se describen más detalladamente en la página siguiente.
Figura 11: Interfaces definidos por el API JAXR.