Al diseñar un sistema de software distribuido, con independencia de que conste principalmente de los componentes desarrollados de forma personalizada o de que incluya todos los componentes "de fábrica" de Java ES, 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 las bases conceptuales para comprender la función de los componentes de los servicios del sistema de Java ES (consulte Componentes de los servicios del sistema).
En general, los servicios que se muestran en la Figura 2–2 se pueden clasificar 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.
Los siguientes párrafos describen los distintos niveles de servicio de infraestructura y hacen referencia a artefactos de lenguaje de programación Java, cuando corresponde. Los niveles de servicio se describen desde el nivel inferior al superior, tal y como se muestra en la Figura 2–2:
Plataforma de sistema operativo. Proporciona la compatibilidad básica para cualquier proceso que se ejecute en un equipo. El sistema operativo (como SolarisTM, Linux o Microsoft Windows) administra dispositivos físicos, así como la memoria, los subprocesos y otros recursos necesarios para la compatibilidad con Java Virtual Machine (máquina 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. Compatible con la comunicación síncrona y asíncrona entre componentes de aplicaciones. La mensajería síncrona es el envío y la recepción en tiempo real de mensajes; incluye invocación de método remoto (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. Ofrece la asistencia 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 de EJBTM, Web y beans controlados por mensajes en un servidor de aplicación o en un servidor web.
Seguridad y directiva. Proporciona asistencia para acceder de forma segura a los recursos de la aplicación. Estos servicios incluyen compatibilidad para las directivas que rigen el acceso basado en funciones 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. Incluye 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 de empresas. Como tales, son servicios de negocios de aplicaciones proporcionados normalmente por servidores independientes (como un servidor de correo electrónico o servidor de calendario).
Integración. Proporciona los servicios que agregan servicios de negocio 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 con 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 general entre los distintos servicios de infraestructura, desde los servicios del sistema operativo de nivel inferior hasta los servicios de aplicación 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.