JavaRush /Blog Java /Random-ES /Pausa para el café #119. Introducción a Java Enterprise E...

Pausa para el café #119. Introducción a Java Enterprise Edition (Java EE)

Publicado en el grupo Random-ES
Fuente: Dev.to Java Enterprise Edition (Java EE) es un conjunto de especificaciones y documentación para el lenguaje Java que describe una arquitectura de plataforma de servidor para resolver los problemas de las medianas y grandes empresas. Pausa para el café #118.  Introducción a Java Enterprise Edition (Java EE) - 1Al aprender Java EE, encontrará los siguientes términos:
  • Un servidor de aplicaciones es una implementación concreta de las especificaciones abstractas de Java EE. Ejemplos: Payara Server (Glassfish), IBM OpenLiberty y JBoss Wildfly.

  • Una Solicitud de especificación de Java (JSR) es una solicitud formal a la comunidad Java para agregar y mejorar tecnologías. Es un organismo que estandariza las API en la plataforma tecnológica Java y se utiliza para agrupar las API en bloques, como JAX-RS (Java API for RESTful Web Services). Para cada JSR, siempre hay una implementación de referencia predeterminada.

  • Una implementación de referencia es una implementación/implementación concreta de un JSR abstracto. Por ejemplo, la implementación de referencia para JAX-RS se llama Jersey. Java EE en sí es un JSR. Por tanto, el servidor de aplicaciones es una colección de diferentes implementaciones de referencia de Java EE JSR. Java EE es JSR 366 y una de sus implementaciones de referencia es Glassfish 5.

  • Jakarta EE es el nuevo nombre de Java EE a partir de 2018. Actualmente, Oracle ha transferido la plataforma Java bajo la gestión de la Fundación Eclipse .

Conceptos básicos de JavaEE

Hay tres API clave en Java EE:
  1. API de persistencia de Java (JPA). Se encarga de almacenar y recuperar información de bases de datos relacionales, que puede ampliarse para funcionar con bases de datos NoSQL. Esta es la capa de datos de la aplicación.

  2. Inyección de contexto y dependencia (CDI API). Es una forma estandarizada de reducir el acoplamiento en las aplicaciones. Gestiona varias interacciones de componentes para garantizar un desacoplamiento libre.

  3. API de Java para servicios web RESTful (JAX-RS). Proporciona recursos a través de HTTP como servicios web.

API de inyección de contexto y dependencia

La inyección de dependencia es una forma especial de control de inversión (una estrategia de software en la que los componentes individuales reciben sus dependencias). Esto externaliza la dependencia en la aplicación para crear componentes de bajo acoplamiento.

Características del CDI

  • La inyección de dependencia (Typesafe) le permite declarar dependencias en tipos para que el compilador detecte errores en tiempo de ejecución.

  • Los contextos del ciclo de vida son la capacidad de vincular el ciclo de vida y las interacciones de los componentes con estado a componentes del ciclo de vida bien definidos pero extensibles.

  • Los interceptores le permiten interceptar solicitudes para acceder a un método específico.

  • Los eventos son una forma de desarrollar aplicaciones altamente desacopladas. Los eventos se pueden activar mientras el método Observers escucha los eventos activados.

  • La interfaz del proveedor de servicios (SPI) es un conjunto de técnicas, API e interfaces que se pueden utilizar como extensiones, como en la biblioteca Apache.

Algunos conceptos de API CDI:

  • CDI Bean Discovery es un mecanismo en el que el marco de inyección de dependencia analiza y descubre beans para controlar cómo se descubren de forma predeterminada, es decir, beans con anotaciones como @Annotated. Hay tres tipos de modo de descubrimiento de beans: TODOS (incluidos los beans sin anotaciones), ANOTADOS y NINGUNO.

  • Un contenedor CDI es un método de fábrica donde las clases Java entran y salen con sus funcionalidades y capacidades. Esta es la aplicación que gestiona los beans.

  • Instancias Bean y Contextuales. Un bean es una plantilla que crea un desarrollador. Una instancia contextual es una instancia de un Bean creada y administrada por un contenedor CDI.

API de persistencia de Java

JPA se utiliza para asignar objetos a tablas de bases de datos relacionales. La API Java Persistence sigue los principios del manifiesto ORM. Manifiesto ORM (Manifiesto de mapeo relacional de objetos):
  • Objetos, no tablas: los desarrolladores escriben objetos, no tablas.

  • Comodidad, no ignorancia: un ORM debería ser conveniente. Los desarrolladores deben tener un conocimiento mínimo de bases de datos relacionales. ORM no es una forma de ocultar la ignorancia, sino una conveniencia.

  • Discreto y transparente: un ORM debe permitir a los desarrolladores controlar lo que hay en la base de datos y tener control total sobre lo que se guarda. Datos heredados, objetos nuevos: ORM le permitirá crear nuevos objetos a partir de datos heredados, es decir, reconstruir la base de datos heredada en objetos Java.

  • Suficiente, pero no demasiado: ORM proporcionará todas las herramientas para solucionar problemas comunes por desajuste de impedancia (término utilizado para referirse a los problemas que surgen por diferencias entre el modelo de base de datos y el lenguaje de programación). Un ORM no debería ser demasiado pesado.

  • Localidad y movilidad: los datos son locales, pero debe ser posible que el estado persistente de la aplicación se mueva a diferentes partes de la aplicación.

  • API estándar, implementación conectable: confía en la API estándar, pero puede cambiar las implementaciones según sea necesario.

Algunos conceptos importantes de JPA: Entidad JPA
  • El componente más modular de los objetos JPA es el antiguo objeto Java (POJO). Cada objeto debe tener un identificador único.

  • Las entidades JPA suelen utilizar anotaciones como @MappedSuperClass, que permite el uso de superclases que contienen campos de entidad comunes. La anotación @AttributeOverride se utiliza para anular entidades de superclase. @Column se utiliza para configurar asignaciones de bases de datos. La anotación @Transient se puede utilizar para campos de una clase de entidad que no deben asignarse a una base de datos.

  • El tipo de acceso es el proceso mediante el cual el proveedor de persistencia accede a los estados de una entidad. El acceso a campos ocurre cuando el proveedor accede a los campos de una clase directamente a través de la reflexión. El acceso a la propiedad se produce cuando se utilizan métodos de propiedad de Java Bean para acceder a los estados, es decir, se utilizan captadores y definidores. Para utilizar el acceso a la propiedad, el captador debe estar anotado con @Id. El tipo de acceso mixto utiliza el acceso a campos y propiedades en la misma clase de entidad mediante la anotación @Access.

API de Java para servicios web RESTful

Limitaciones de la arquitectura REST:
  1. El cliente y el servidor son independientes entre sí.

  2. Sin estado: Cada solicitud individual que llega al servidor es autónoma y única. El servidor no hace ninguna suposición sobre la solicitud anterior.

  3. Capacidad de caché: el sistema debe admitir el almacenamiento en caché en diferentes niveles para mejorar el rendimiento y la escalabilidad.

  4. Una interfaz unificada significa que el cliente debe tener una interfaz unificada común para acceder a los recursos del servidor, así como para interactuar con los recursos del servidor. Sistema multinivel: el servidor se puede implementar en diferentes capas de tal manera que el cliente no tenga que preocuparse por un sistema multinivel, como un servidor que admita equilibrio de carga.

Algunos conceptos generales relacionados con JAX-RS:
  • Método HTTP GET: solicitud de un recurso o recursos. El método de solicitud GET es idempotente, lo que significa que realizar la misma solicitud al método repetidamente no debería cambiar el estado del recurso o los datos en el servidor.

  • Método HTTP POST: la solicitud POST se utiliza para crear nuevos recursos en el servidor. Esto hace que los datos establecidos en el servidor cambien. El POST suele tener un cuerpo en el que se publica o adjunta el payload o lo que queramos crear en el servidor.

  • Método HTTP PUT: se utiliza semánticamente para actualizar recursos en el servidor.

  • Método HTTP DELETE: se utiliza para eliminar recursos en el servidor.

  • Tipos de contenido. Hay varios tipos de contenido que se pueden consumir y crear mediante métodos de consulta: XML, CSV, EXCEL, TEXT y JSON.

  • JAX-RS tiene el concepto de escribir un cuerpo de mensaje. Estas son construcciones API que se utilizan para convertir tipos Java al tipo esperado por el cliente. La anotación @Produces se puede utilizar para especificar el tipo al que se convierte la respuesta de un objeto Java.

  • La anotación @Consumes le dice al tiempo de ejecución de JAX-RS el tipo de contenido que consume un método de recurso determinado. Luego, el tiempo de ejecución JAX-RS convierte el contenido JSON pasado como carga útil en un objeto Java cuyo tipo es el mismo que el parámetro del método.

  • Mapeador de excepciones JAX-RS: una construcción API utilizada para asignar excepciones a respuestas HTTP. La anotación @Provider se utiliza para registrar mediante programación un solucionador de excepciones con el tiempo de ejecución JAX-RS.

Esta es una introducción muy sencilla a Java EE. Para crear aplicaciones web utilizando Java EE, deberá profundizar en cada API clave.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION