Los componentes del software de interacción de las aplicaciones de empresa distribuidas requieren servicios de infraestructura subyacentes que permitan a los componentes distribuidos comunicarse entre sí, coordinar su trabajo, implementar un acceso seguro, etc. Esta sección explica la función principal desarrollada por una serie de componentes de Java ES al proporcionar estos servicios de infraestructura.
Al diseñar un sistema de software distribuido, con independencia de que esté formado principalmente por los componentes desarrollados de forma personalizada o por los componentes "de fábrica" de Java ES, éste debe incluir una serie de servicios de infraestructura. Estos servicios operan en varios niveles.
La dimensión de las dependencias de los servicios de infraestructura se muestra en la Figura 2–2. Los niveles que se muestran en esta figura son una vista ampliada de la capa de los servicios de infraestructura de la Figura 1–1. La jerarquía de los servicios de la Figura 2–2 y las dependencias existentes entre ellos constituyen una importante dimensión de la arquitectura lógica de la solución. Estos servicios de infraestructura proporcionan los principales motivos para los componentes de servicios del sistema de Java ES (consulte Componentes de servicios del sistema).
En general, los servicios mostrados en la siguiente figura se dividen en tres amplios grupos: servicios de plataforma de nivel inferior, servicios de aplicación de nivel superior y un grupo de servicios de nivel intermedio. Los respectivos nombres proceden de su ubicación entre los otros dos grupos.
Las siguientes descripciones de los diferentes niveles de servicio de infraestructura hacen referencia a los artefactos del lenguaje de programación de Java, según sea pertinente. La Figura 2–2 muestra los niveles en orden ascendente, de menor a mayor:
Plataforma de sistema operativo. Proporciona la compatibilidad básica para cualquier proceso que se ejecute en un equipo. El sistema operativo administra los dispositivos físicos, así como la memoria, los subprocesos y otros recursos necesarios para poder utilizar la Máquina virtual de Java (JVMTM).
Transporte de red. Proporciona la compatibilidad de red necesaria para las comunicaciones entre los componentes de aplicación distribuidos que se ejecutan en distintos equipos. Estos servicios son compatibles con protocolos como TCP y HTTP. Otros protocolos de comunicación de nivel superior (consulte el nivel de mensajería) dependen de estos servicios de transporte básicos.
Persistencia. Proporciona la compatibilidad necesaria para almacenar datos estáticos (información sobre el usuario, el directorio o la configuración) y datos de aplicación dinámica (información que se actualiza con frecuencia). También permite acceder a estos dos tipos de datos.
Mensajería. Proporciona compatibilidad con las comunicaciones tanto síncronas como asíncronas entre los componentes de la aplicación. La mensajería síncrona es el envío y la recepción de mensajes en tiempo real; incluye llamadas a métodos remotos (RMI) entre componentes de J2EE e interacciones de SOAP con servicios web. La mensajería asíncrona es la comunicación por la cual el envío de un mensaje no depende de la disponibilidad del consumidor para recibirlo inmediatamente. Las especificaciones de mensajería asíncrona, por ejemplo, Java Message Service (JMS) y ebXML, admiten la fiabilidad garantizada y otras semánticas de mensajería.
Tiempo de ejecución.Proporciona la compatibilidad necesaria para cualquier modelo de componente distribuido, como los modelos J2EE o CORBA. Además de la invocación de métodos remotos necesaria para componentes distribuidos y bien acoplados, los servicios de tiempo de ejecución incluyen administración de estado de componentes (ciclo de vida), administración de grupos de subprocesos, sincronización (bloqueo mutuo), servicios de persistencia, supervisión de transacciones distribuidas y gestión de excepciones distribuidas. En un entorno de J2EE, estos servicios de tiempo de ejecución los ofrecen los contenedores web, de EJB y beans controlados por mensajes en un servidor de aplicaciones o en un servidor web.
Seguridad y directiva. Proporciona compatibilidad con el acceso seguro a los recursos de la aplicación. Estos servicios incluyen compatibilidad con las directivas que controlan el acceso basado en roles o en grupos a los recursos distribuidos, así como las funciones de inicio de sesión único. El inicio de sesión único permite que la autenticación de un usuario en un servicio en un sistema distribuido se aplique automáticamente a otros servicios (componentes de J2EE, servicios de negocios y servicios web) del sistema.
Colaboración de usuarios. Proporciona servicios que desempeñan un papel importante al permitir la comunicación directa entre usuarios y la colaboración entre usuarios en entornos de Internet y empresariales. Son servicios de negocios de nivel de aplicación proporcionados normalmente por servidores independientes (como un servidor de correo electrónico o un servidor de calendario).
Integración. Proporciona los servicios que agregan servicios de negocios existentes. Ofrece una interfaz común para acceder a los servicios, como en un portal, o integrando los servicios mediante un motor de procesos que los coordina en el flujo de trabajo de producción. La integración también puede producirse como interacciones de negocio a negocio entre varias empresas.
Los niveles de servicio que se muestran en la Figura 2–2 reflejan una dependencia entre los servicios de infraestructura, desde los servicios del sistema operativo de nivel inferior hasta los servicios de aplicaciones de nivel superior y los servicios de integración. Cada servicio depende normalmente de servicios de niveles inferiores y respalda el funcionamiento de servicios superiores. La Figura 2–2, sin embargo, no representa una distribución en capas estricta de los servicios de infraestructura. Los servicios de nivel superior pueden interactuar directamente con servicios de nivel inferior sin depender de niveles intermedios. Por ejemplo, algunos servicios de tiempo de ejecución pueden depender directamente de servicios de plataforma sin necesitar ninguno de los niveles de servicio intermedios. Además, otros niveles de servicio, como los de supervisión o administración, también podrían incluirse en esta ilustración conceptual.
Los componentes de Java ES despliegan los niveles de los servicios de infraestructura distribuidos que se muestran en la Figura 2–2. La posición de los componentes de servicios del sistema en los diferentes niveles se muestra en la siguiente figura.
Los cuadros sombreados de la figura hacen referencia a componentes no incluidos en Java ES. Los componentes de colaboración de usuarios no forman parte de Java ES, aunque se implementen a menudo junto con los componentes de Java ES y se utilicen en las arquitecturas de Java ES. Estos componentes forman parte de Sun Java Communications Suite y se hace referencia a ellos en este documento sólo con fines ilustrativos. Además, las plataformas de sistemas operativos no forman parte formalmente de Java ES, pero se incluyen para mostrar las plataformas en las que se pueden utilizar los componentes de Java ES.
En general, los componentes de los servicios del sistema de Java ES que se muestran en la Figura 2–3 dependen de los componentes situados debajo de ellos en la infraestructura, a la vez que proporcionan respaldo a los componentes que están situados encima de ellos. Estas relaciones de dependencia y compatibilidad son un factor clave para diseñar las arquitecturas lógicas.
En la siguiente tabla, se muestran las relaciones específicas entre los componentes de servicios del sistema de Java ES, enumerados desde el nivel superior al inferior, tal y como se muestra en la Figura 2–3.
Tabla 2–1 Relaciones entre los componentes de los servicios del sistema de Java ES