JavaRush /Blog Java /Random-ES /Introducción a JavaEE
zor07
Nivel 31
Санкт-Петербург

Introducción a JavaEE

Publicado en el grupo Random-ES
Hoy hablaremos sobre qué es Java EE: en qué consiste, cuáles son las características de la arquitectura de las aplicaciones Java EE y describiremos las diversas tecnologías de esta plataforma. El tema en sí es extenso, pero no nos detendremos en lo básico. Al final, haremos una pequeña comparación de Java EE con Spring Framework y responderemos la pregunta: "qué es mejor aprender" (spoiler: por supuesto, necesitas aprender todo =) ) Introducción a Java EE - 1Comencemos con lo básico.

Java EE: ¿qué es?

Java EE es una plataforma construida sobre Java SE que proporciona una API y un entorno de ejecución para desarrollar y ejecutar aplicaciones de red a gran escala, de múltiples niveles, escalables, confiables y seguras. Estas aplicaciones se denominan aplicaciones empresariales porque resuelven los problemas que enfrentan las grandes empresas. Sin embargo, las grandes corporaciones y agencias gubernamentales no son las únicas que pueden beneficiarse de este tipo de aplicaciones y de los beneficios que proporciona Java EE. Las soluciones que ofrece la plataforma Java EE son útiles y, a veces, simplemente necesarias, para desarrolladores individuales y pequeñas organizaciones.

Desarrollo JavaEE

Java EE se desarrolla a través del Java Community Process (JCP), formado en 1998. Permite a las partes interesadas participar en la configuración de futuras versiones de las especificaciones de la plataforma del lenguaje Java. La base de este proceso son los JSR (Solicitud de especificación de Java), documentos formales que describen las especificaciones y tecnologías que se proponen agregar a la plataforma Java. Estas solicitudes las realizan miembros de la comunidad: desarrolladores y empresas comunes. Estos últimos incluyen Oracle, Red Hat, IBM, Apache y muchos otros. Aquellos. Los chicos proponen nuevas características y ventajas para su consideración que les gustaría incluir en Java. Y luego se realiza una votación, a partir de la cual se decide qué incluir en la próxima versión. El historial de versiones de Java EE tiene este aspecto:
  • J2EE 1.2 (diciembre de 1999)
  • J2EE 1.3 (septiembre de 2001)
  • J2EE 1.4 (noviembre de 2003)
  • Java EE 5 (mayo de 2006)
  • Java EE 6 (diciembre de 2009)
  • Java EE 7 (mayo)
  • Java EE 8 (agosto de 2017)
  • Yakarta EE 8 (septiembre de 2019)
En 2017 se produjo un nuevo hito en el desarrollo de la plataforma: Oracle transfirió el control del desarrollo de Java EE a la Fundación Eclipse. Y en abril de 2018, Java EE pasó a llamarse Jakarta EE, que es totalmente compatible con Java EE 8.

Arquitectura de aplicaciones Java EE

Una breve introducción. Para que sea más fácil de entender, hablemos sobre la estructura de las aplicaciones Java EE y algunos de los términos que usaremos más adelante. Las aplicaciones Java EE tienen una estructura que tiene dos cualidades clave:
  • En primer lugar, multinivel. Las aplicaciones Java EE tienen varios niveles y hablaremos de esto con más detalle;
  • en segundo lugar, anidar. Hay un servidor Java EE (o servidor de aplicaciones), con contenedores de componentes ubicados en su interior. Estos contenedores albergan componentes (¡bingo!).
Para explicar la arquitectura de las aplicaciones Java EE, primero hablemos de capas. ¿Cuales son los niveles? ¿Qué tecnologías Java EE se utilizan en diferentes niveles? A continuación, analizaremos cómo se interconectan los servidores de aplicaciones, los contenedores de componentes y los propios componentes. Pero tenga en cuenta que todas estas son vistas desde diferentes ángulos de la misma cosa, y el orden no es tan importante aquí.

Niveles de aplicación

Las aplicaciones multinivel son aplicaciones que se dividen según principios funcionales en módulos aislados (niveles, capas). Normalmente (incluso en el contexto del desarrollo de Java EE), las aplicaciones empresariales se dividen en tres niveles:
  • cliente;
  • nivel promedio;
  • nivel de acceso a los datos.
  1. La capa de cliente es una aplicación que solicita datos del servidor Java EE (capa intermedia). El servidor, a su vez, procesa la solicitud del cliente y le devuelve una respuesta. La aplicación cliente puede ser un navegador, una aplicación independiente (móvil o de escritorio) u otras aplicaciones de servidor sin una interfaz gráfica.

  2. El nivel medio se divide, a su vez, en nivel web y nivel de lógica de negocio.

    1. La capa web consta de algunos componentes que proporcionan interacción entre los clientes y la capa de lógica empresarial.

      A nivel web se utilizan las siguientes tecnologías Java EE:

      • Tecnología JavaServer Faces (JSF);
      • Páginas del servidor Java (JSP);
      • lenguaje de expresión (EL);
      • servlets;
      • Contextos e inyección de dependencias para Java EE (CDI).

    2. La capa de lógica empresarial consta de componentes que implementan toda la lógica empresarial de la aplicación. La lógica empresarial es un código que proporciona una funcionalidad que cubre las necesidades de algún área empresarial específica (industria financiera, banca, comercio electrónico). Este nivel puede considerarse el núcleo de todo el sistema.

      Tecnologías que intervienen en este nivel:

      • JavaBeans empresariales (EJB);
      • servicios web RESTful de JAX-RS;
      • Entidades API de persistencia de Java;
      • Servicio de mensajes Java.

  3. Nivel de acceso a datos. Este nivel a veces se denomina nivel de sistemas de información empresarial (EIS). EIS consta de varios servidores de bases de datos, sistemas de planificación de recursos empresariales ERP (Enterprise Resource Planning) y otras fuentes de datos. La capa de lógica empresarial accede a esta capa para obtener datos.

    En este nivel podrás encontrar tecnologías como:

    • API de conectividad de bases de datos Java (JDBC);
    • API de persistencia de Java;
    • Arquitectura del conector Java EE;
    • API de transacciones de Java (JTA).

Servidores de aplicaciones, contenedores, componentes.

Echemos un vistazo a la definición de Java EE de Wikipedia. Java EE es un conjunto de especificaciones y documentación relacionada para el lenguaje Java, que describe la arquitectura de la plataforma del servidor para las tareas de medianas y grandes empresas. Para comprender mejor lo que significa un "conjunto de especificaciones" en este contexto, hagamos una analogía con una interfaz Java. La propia interfaz Java carece de funcionalidad. Simplemente define algún contrato según el cual se implementa alguna funcionalidad. Pero otras clases implementan la interfaz. Además, una interfaz puede tener varias implementaciones, cada una de las cuales puede diferir en algunos detalles. Con las especificaciones todo es exactamente igual. Java EE desnudo es solo un conjunto de especificaciones. Estas especificaciones son implementadas por varios servidores Java EE. Un servidor Java EE es una aplicación de servidor que implementa las API de la plataforma Java EE y proporciona servicios Java EE estándar. Los servidores Java EE a veces se denominan servidores de aplicaciones. Los datos del servidor pueden contener componentes de aplicación, cada uno de los cuales corresponde a su propio nivel en una jerarquía de varios niveles. El servidor Java EE proporciona varios servicios a estos componentes en forma de contenedor. Los contenedores son la interfaz entre los componentes que alojan y la funcionalidad independiente de la plataforma de bajo nivel que admite el componente. Los contenedores proporcionan servicios específicos a los componentes que alojan. Por ejemplo, gestión del ciclo de vida del desarrollo, inyección de dependencias, concurrencia, etc. Los contenedores ocultan la complejidad técnica y aumentan la portabilidad. Hay cuatro tipos diferentes de contenedores en Java EE :
  1. La mayoría de los navegadores implementan contenedores de subprogramas. Al desarrollar subprogramas, puede concentrarse en el lado visual de la aplicación, mientras que el contenedor proporciona un entorno seguro.

  2. El contenedor de cliente de aplicaciones (ACC) contiene un conjunto de clases, bibliotecas y otros archivos de Java necesarios para implementar funciones como inyección, gestión de seguridad y servicios de nombres en aplicaciones Java SE.

  3. El contenedor web proporciona los servicios principales para gestionar y ejecutar componentes web (servlets, componentes EJB Lite, páginas JSP, filtros, escuchas, páginas JSF y servicios web). Es responsable de crear instancias, inicializar e invocar servlets y soportar los protocolos HTTP y HTTPS. Este contenedor se utiliza para servir páginas web a los navegadores de los clientes.

  4. El contenedor EJB (Enterprise Java Bean) es responsable de gestionar y ejecutar los componentes del modelo EJB que contienen la capa de lógica empresarial de la aplicación. Crea nuevas entidades de bean EJB, gestiona su ciclo de vida y proporciona servicios como transacciones, seguridad, concurrencia, distribución, denominación o capacidades de invocación asincrónica.

Además en Java EE hay cuatro tipos de componentes que debe soportar una implementación de la especificación Java EE:
  1. Los applets son aplicaciones de interfaz gráfica de usuario (GUI) que se ejecutan en un navegador. Aprovechan la rica API Swing para producir potentes interfaces de usuario.

  2. Las aplicaciones son programas que se ejecutan en el lado del cliente. Normalmente son interfaces gráficas de usuario (GUI) y se utilizan para el procesamiento por lotes.

  3. Aplicaciones web (que constan de servlets y sus filtros, detectores de eventos web, páginas JSP y JSF): se ejecutan en un contenedor web y responden a solicitudes HTTP de clientes web. Los servlets también admiten puntos finales de servicios web SOAP y RESTful.

  4. Las aplicaciones empresariales (creadas con Enterprise Java Beans, Java Message Service, Java Transaction API, llamadas asincrónicas, servicios de tiempo) se ejecutan en un contenedor EJB. Los EJB administrados por contenedores manejan la lógica empresarial transaccional. Se puede acceder a ellos de forma local o remota a través de RMI (o HTTP para servicios web SOAP y RESTful).

El siguiente diagrama muestra una arquitectura de aplicación Java EE típica: Introducción a Java EE - 2

Tecnologías

Entonces, hemos resuelto la arquitectura. La estructura general debe ser clara. En el proceso de descripción de los componentes arquitectónicos, tocamos algunas tecnologías Java EE como EJB, JSP, etc., echemos un vistazo más de cerca. La siguiente tabla muestra las tecnologías que se utilizan principalmente a nivel de cliente:
Tecnología Objetivo
servlets Clases de Java que procesan dinámicamente solicitudes de clientes y generan respuestas (generalmente páginas HTML).
Caras del servidor Java (JSF) Un marco para crear aplicaciones web con una interfaz de usuario. Le permite incluir componentes de interfaz de usuario (por ejemplo, campos y botones) en una página, transformar y validar estos componentes y almacenar estos datos en el almacenamiento del lado del servidor.
Tecnología Java Server Faces Facelets Es un subtipo de aplicación JSF que utiliza páginas XHTML en lugar de páginas JSP.
Páginas del servidor Java (JSP) Documentos de texto que se compilan en servlets. Le permite agregar contenido dinámico a páginas estáticas (como páginas HTML)
Biblioteca de etiquetas estándar de páginas de servidor Java (JSTL) Una biblioteca de etiquetas que encapsula la funcionalidad principal en el contexto de páginas JSP.
Lenguaje de expresión Un conjunto de etiquetas estándar que se utilizan en páginas JSP y Facelets para acceder a componentes Java EE.
Contextos e inyección de dependencias para Java EE (CDI) Representa un conjunto de servicios proporcionados por contenedores Java EE para gestionar el ciclo de vida de los componentes, así como para inyectar componentes en objetos del cliente de forma segura.
Componentes de Java Beans Objetos que actúan como almacenamiento temporal de datos para las páginas de la aplicación.
La siguiente tabla muestra las tecnologías utilizadas a nivel de lógica de negocios:
Tecnología Objetivo
Componentes de Enterprise Java Beans (bean empresarial) Los EJB son beans administrados que contienen la funcionalidad principal de una aplicación.
Servicios web RESTful de JAX-RS Es una API para el desarrollo de servicios web que cumplen con el estilo arquitectónico REST.
Puntos finales del servicio web JAX-WS API para crear y consumir servicios web SOAP.
Entidades de la API de persistencia de Java (JPA) Una API para acceder a datos en almacenes de datos y convertir esos datos en objetos del lenguaje de programación Java y viceversa.
Beans gestionados Java EE Beans administrados que proporcionan la lógica empresarial de la aplicación pero no requieren las características transaccionales o de seguridad del EJB.
Servicio de mensajes Java La API Java Message Service (JMS) es un estándar de mensajería que permite a los componentes de la aplicación Java EE crear, enviar, recibir y leer mensajes. Esto garantiza una comunicación distribuida, confiable y asíncrona entre componentes.
La siguiente tabla muestra las tecnologías utilizadas en la capa de acceso a datos:
Tecnología Objetivo
La API de conectividad de bases de datos Java (JDBC) API de bajo nivel para acceder y recuperar datos de almacenes de datos. Un uso típico de JDBC es escribir consultas SQL en una base de datos específica.
La API de persistencia de Java Una API para acceder a datos en almacenes de datos y convertir esos datos en objetos del lenguaje de programación Java y viceversa. API de nivel mucho más alto en comparación con JDBC. Oculta toda la complejidad de JDBC al desarrollador bajo el capó.
La arquitectura del conector Java EE API para conectar otros recursos corporativos, como:
  • ERP (Enterprise Resource Planning, sistema de planificación de recursos empresariales),
  • CRM (inglés: Customer Relationship Management, sistema de gestión de relaciones con el cliente).
La API de transacciones de Java (JTA) Una API para definir y gestionar transacciones, incluidas transacciones distribuidas y transacciones en múltiples almacenes de datos.

Java EE frente a primavera

Spring Framework se considera un competidor de Java EE. Si nos fijamos en el desarrollo de estas dos plataformas, surge una imagen interesante. Las primeras versiones de Java EE se crearon con la participación de IBM. Resultaron geniales, pero torpes, pesados ​​e incómodos de usar. Los desarrolladores tuvieron problemas debido a la necesidad de mantener una gran cantidad de archivos de configuración y otras razones que complican el desarrollo. Al mismo tiempo, nació Spring IoC. Era una biblioteca pequeña, hermosa y fácil de usar. También usaba un archivo de configuración, pero a diferencia de Java EE, solo había uno. La simplicidad de Spring ha llevado al hecho de que casi todo el mundo empezó a utilizar este framework en sus proyectos. Y luego Spring y Java EE comenzaron su camino hacia lo mismo, pero desde diferentes extremos. Pivotal Software, el desarrollador de Spring, comenzó a lanzar proyecto tras proyecto para cubrir todas las necesidades posibles e imposibles de los desarrolladores de Java. Poco a poco, lo que antes se llamaba Spring se convirtió primero en uno de los proyectos y luego se fusionó por completo con varios otros proyectos en Spring Core. Todo esto llevó a la inevitable complicación de Spring en comparación con lo que era originalmente. Con el tiempo, se volvió muy difícil realizar un seguimiento de toda la maraña de dependencias de Spring, y surgió la necesidad de una biblioteca separada que cargara y ejecutara todo por sí sola (ahora el amado Spring Boot ha tenido problemas en alguna parte). Todo este tiempo, JCP ha estado trabajando en una cosa: lograr la máxima simplificación de todo lo posible dentro de Java EE. Como resultado, en un EJB moderno, para describir un bean, basta con especificar una anotación encima de la clase, lo que le da al desarrollador acceso a todo el poder de la tecnología Enterprise Java Beans. Y simplificaciones similares han afectado a todas las especificaciones de Java EE. Como resultado, Spring y Java EE están aproximadamente a la par en términos de funcionalidad. Algunas cosas son mejores, otras son peores, pero si miras globalmente, no hay grandes diferencias. Lo mismo ocurre con la complejidad del trabajo. Tanto Spring como Java EE son excelentes herramientas. Quizás el mejor que existe actualmente para crear aplicaciones de red empresarial en Java. Sin embargo, Java EE generalmente solo puede funcionar dentro del servidor de aplicaciones empresariales (Tomcat no es uno), y una aplicación en la pila Spring puede ejecutarse en cualquier cosa (en el mismo Tomcat), e incluso sin ningún servidor (ya que se ejecutará dentro de sí mismo independientemente). Esto convierte a Spring en una herramienta ideal para desarrollar pequeñas aplicaciones GUI front-end o arquitecturas de microservicios. Pero eliminar la dependencia de los servidores de aplicaciones tuvo un impacto negativo en la escalabilidad de las aplicaciones Spring. Y Java EE es muy adecuado para implementar una aplicación de clúster monolítica escalable. Los desarrolladores familiarizados con Spring Framework tienen actualmente una mayor demanda en el mercado laboral. Así sucedió históricamente: en un momento en que Java EE era demasiado complicado, Spring "ganó una base de clientes". Y, sin embargo, no hay una respuesta clara a la pregunta de qué aprender Spring o Java EE. A un principiante se le pueden dar los siguientes consejos. Familiarícese (al menos superficialmente) con ambas plataformas. Escriba un pequeño proyecto doméstico tanto en Java EE como en Spring. Y luego profundice en el marco que será necesario en el trabajo. Como resultado, cambiar entre Spring y Java EE no será difícil.

Resultados

¡Un tema de gran escala, por supuesto, no se puede cubrir en un solo artículo! Después de un montón de términos nuevos, probablemente quieras "aplicar" este conocimiento a un ejemplo de la vida real. Por lo tanto, continuaremos estudiando Java EE: encontrará lecciones prácticas sobre cómo configurar un entorno local para el desarrollo de Java EE en el próximo artículo.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION