-
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:-
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.
-
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.
-
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.
-
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:-
O cliente e o servidor são independentes um do outro.
-
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.
-
Capacidade de cache: O sistema deve suportar cache em diferentes níveis para melhorar o desempenho e a escalabilidade.
-
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.
-
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.
GO TO FULL VERSION