JavaRush /Blogue Java /Random-PT /Pausa para café #119. Introdução ao Java Enterprise Editi...

Pausa para café #119. Introdução ao Java Enterprise Edition (Java EE)

Publicado no grupo Random-PT
Fonte: Dev.to Java Enterprise Edition (Java EE) é um conjunto de especificações e documentação para a linguagem Java que descreve uma arquitetura de plataforma de servidor para resolver problemas de médias e grandes empresas. Pausa para café #118.  Introdução ao Java Enterprise Edition (Java EE) - 1Ao aprender Java EE você encontrará os seguintes termos:
  • Um servidor de aplicativos é uma implementação concreta das especificações abstratas do Java EE. Exemplos: Servidor Payara (Glassfish), IBM OpenLiberty e JBoss Wildfly.

  • Uma solicitação de especificação Java (JSR) é uma solicitação formal à comunidade Java para adicionar e melhorar tecnologias. É um órgão que padroniza APIs na plataforma de tecnologia Java e é utilizado para agrupar APIs em blocos, como JAX-RS (Java API for RESTful Web Services). Para cada JSR, sempre existe uma implementação de referência padrão.

  • Uma implementação de referência é uma implementação/implementação concreta de uma JSR abstrata. Por exemplo, a implementação de referência para JAX-RS é chamada Jersey. O próprio Java EE é um JSR. Assim, o servidor de aplicativos é uma coleção de diferentes implementações de referência Java EE JSR. Java EE é JSR 366 e uma de suas implementações de referência é Glassfish 5.

  • Jakarta EE é o novo nome do Java EE a partir de 2018. Atualmente, a Oracle transferiu a plataforma Java sob a gestão da Eclipse Foundation .

Noções básicas de JavaEE

Existem três APIs principais no Java EE:
  1. API de persistência Java (JPA). É responsável por armazenar e recuperar informações de bancos de dados relacionais, que podem ser estendidos para funcionar com bancos de dados NoSQL. Esta é a camada de dados do aplicativo.

  2. Injeção de Contexto e Dependência (API CDI). É uma forma padronizada de reduzir o acoplamento nas aplicações. Ele gerencia várias interações de componentes para garantir o desacoplamento livre.

  3. API Java para serviços Web RESTful (JAX-RS). Ele fornece recursos via HTTP como serviços da web.

API de injeção de contexto e dependência

A injeção de dependência é uma forma especial de controle de inversão (uma estratégia de software na qual componentes individuais recebem suas dependências). Isso externaliza a dependência do aplicativo para criar componentes de baixo acoplamento.

Características do CDI

  • A injeção de dependência (Typesafe) permite declarar dependências em tipos para que o compilador detecte erros em tempo de execução.

  • Contextos de ciclo de vida são a capacidade de vincular interações de ciclo de vida e componentes com estado a componentes de ciclo de vida bem definidos, mas extensíveis.

  • Os interceptadores permitem interceptar solicitações de acesso a um método específico.

  • Os eventos são uma forma de desenvolver aplicações altamente desacopladas. Os eventos podem ser disparados enquanto o método Observers escuta os eventos disparados.

  • Service Provider Interface (SPI) é um conjunto de técnicas, APIs e interfaces que podem ser usadas como extensões, como na biblioteca Apache.

Alguns conceitos da API CDI:

  • CDI Bean Discovery é um mecanismo no qual a estrutura de injeção de dependência analisa e descobre beans para controlar como os beans são descobertos por padrão, ou seja, beans com anotações como @Annotated. Existem três tipos de modo de descoberta de bean: ALL (incluindo beans não anotados), ANNOTATED e NONE.

  • Um contêiner CDI é um método de fábrica onde as classes Java entram e saem com suas funcionalidades e capacidades. Este é o aplicativo que gerencia os beans.

  • Instâncias Bean e Contextuais. Um bean é um modelo criado por um desenvolvedor. Uma instância contextual é uma instância de um Bean criada e gerenciada por um contêiner CDI.

API de persistência Java

JPA é usado para mapear objetos para tabelas de banco de dados relacionais. A API Java Persistence segue os princípios do manifesto ORM. Manifesto ORM (Manifesto de Mapeamento Relacional de Objeto):
  • Objetos, não tabelas: os desenvolvedores escrevem objetos, não tabelas.

  • Conveniência, não ignorância: um ORM deve ser conveniente. Os desenvolvedores devem ter um conhecimento mínimo de bancos de dados relacionais. ORM não é uma forma de esconder a ignorância, mas uma conveniência.

  • Discreto e transparente: Um ORM deve permitir que os desenvolvedores possam controlar o que está no banco de dados e ter controle total sobre o que é salvo. Dados legados, novos objetos: ORM permitirá criar novos objetos a partir de dados legados, ou seja, reconstruir o banco de dados legado em objetos Java.

  • Basta, mas não muito: o ORM fornecerá todas as ferramentas para resolver problemas comuns devido à incompatibilidade de impedância (termo usado para se referir a problemas que surgem devido a diferenças entre o modelo de banco de dados e a linguagem de programação). Um ORM não deve ser excessivamente pesado.

  • Localidade e mobilidade: os dados são locais, mas deve ser possível que o estado persistente da aplicação se mova para diferentes partes da aplicação.

  • API padrão, implementação conectável: confie na API padrão, mas pode alterar as implementações conforme necessário.

Alguns conceitos importantes de JPA: Entidade JPA
  • O componente mais modular dos objetos JPA é o simples e antigo objeto Java (POJO). Cada objeto deve ter um identificador exclusivo.

  • As entidades JPA normalmente usam anotações como @MappedSuperClass, que permite o uso de superclasses contendo campos de entidade comuns. A anotação @AttributeOverride é usada para substituir entidades da superclasse. @Column é usado para configurar mapeamentos de banco de dados. A anotação @Transient pode ser usada para campos em uma classe de entidade que não devem ser mapeados para um banco de dados.

  • O tipo de acesso é o processo pelo qual o provedor de persistência acessa estados em uma entidade. O acesso ao campo ocorre quando o provedor acessa os campos de uma classe diretamente por meio de reflexão. O acesso à propriedade ocorre quando métodos de propriedade Java Bean são usados ​​para acessar estados, ou seja, getters e setters são usados. Para usar o acesso à propriedade, o getter deve ser anotado com @Id. O tipo de acesso misto usa acesso a campos e propriedades na mesma classe de entidade usando a anotação @Access.

API Java para serviços web RESTful

Limitações da arquitetura REST:
  1. O cliente e o servidor são independentes um do outro.

  2. Stateless: Cada solicitação individual que chega ao servidor é autônoma e única. O servidor não faz nenhuma suposição a partir da solicitação anterior.

  3. Capacidade de cache: O sistema deve suportar cache em diferentes níveis para melhorar o desempenho e a escalabilidade.

  4. Uma interface unificada significa que o cliente deve ter uma interface unificada comum para acessar recursos no servidor, bem como para interagir com recursos no servidor. Sistema multicamadas: O servidor pode ser implementado em diferentes camadas de forma que o cliente não precise se preocupar com um sistema multicamadas, como um servidor que suporta balanceamento de carga.

Alguns conceitos gerais relacionados ao JAX-RS:
  • Método HTTP GET: solicitação de um recurso ou recursos. O método de solicitação GET é idempotente, o que significa que fazer a mesma solicitação repetidamente ao método não deve alterar o estado do recurso ou dos dados no servidor.

  • Método HTTP POST: A solicitação POST é usada para criar novos recursos no servidor. Isso faz com que o conjunto de dados no servidor seja alterado. POST geralmente possui um corpo no qual a carga útil ou o que queremos criar no servidor é publicada ou anexada.

  • Método HTTP PUT: usado semanticamente para atualizar recursos no servidor.

  • Método HTTP DELETE: Usado para excluir recursos no servidor.

  • Tipos de conteúdo. Existem vários tipos de conteúdo que podem ser consumidos e criados por métodos de consulta: XML, CSV, EXCEL, TEXT e JSON.

  • JAX-RS tem o conceito de escrever o corpo de uma mensagem. Estas são construções de API usadas para converter tipos Java no tipo esperado pelo cliente. A anotação @Produces pode ser usada para especificar o tipo para o qual a resposta de um objeto Java é convertida.

  • A anotação @Consumes informa ao tempo de execução JAX-RS o tipo de conteúdo que um determinado método de recurso está consumindo. O tempo de execução JAX-RS converte então o conteúdo JSON passado como carga útil em um objeto Java cujo tipo é igual ao parâmetro do método.

  • Mapeador de exceções JAX-RS: uma construção de API usada para mapear exceções para respostas HTTP. A anotação @Provider é usada para registrar programaticamente um resolvedor de exceção com o tempo de execução JAX-RS.

Esta é uma introdução muito simples ao Java EE. Para construir aplicativos da web usando Java EE, você precisará se aprofundar em cada API principal.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION