Conceitos Essenciais de Java EE: Collections, JPA, MVC e EJB
Classificado em Computação
Escrito em em português com um tamanho de 46,9 KB
Collections
Características das Collections
- Interface
SET
: Coleção não ordenada que não contém duplicatas; a ordem de inserção dos elementos não é mantida. - Interface
LIST
: Coleção de classes ordenadas onde as duplicatas são permitidas; a ordem de inserção dos elementos é mantida. - Interface
MAP
: Os elementos são associados a uma chave; o acesso aos elementos é feito através da chave, em vez do próprio elemento; não há duplicidade de chaves. - Interface
PROPERTIES
: Coleção de propriedades do tipo CHAVE e VALOR, onde cada chave da propriedade tem seu valor único.
Principais Métodos da Interface Collections
void sort(List lista)
- classifica em ordem acessível.int binarySearch(List lista, Object chave)
- retorna o índice da lista onde o elemento está (-1 se não for encontrado).void shuffle(Collection coleção)
- mistura os elementos.void swap(Collection coleção, int pos1, int pos2)
- troca posições.void reverse(List lista)
- inverte a ordem dos elementos.iterator()
- retorna umIterator
que permite percorrer a lista.size()
- retorna a quantidade de elementos da lista.hasNext()
- verifica se há um próximo elemento na lista para ser percorrido.next()
- retorna o elemento da lista.
JPA - Métodos da Interface EntityManager
persist(Object o)
: Persiste uma entidade, tornando-a gerenciada pelo Gerenciador de Entidades. Assim, qualquer alteração nela será refletida no banco de dados.T merge(T entidade)
: Sincroniza os dados no banco de dados com os atributos da entidade. Retorna um objeto gerenciado (managed) e não pode ser utilizado em um objeto REMOVIDO.void refresh(Object entidade)
: Sincroniza os atributos na entidade com os dados do banco de dados.void remove(Object entidade)
: Remove a entidade do banco de dados (deleta o registro).T find(Class<T> classeEntidade, Object chavePrimaria)
: Retorna uma entidade GERENCIADA através de sua chave primária ounull
caso a chave não exista.Query createQuery(String sql)
: Cria uma consulta dinâmica.Query createNamedQuery(String nomeConsulta)
: Cria uma consulta nomeada.void begin()
: Inicia uma transação.void commit()
: Encerra uma transação, gravando quaisquer alterações no banco.void rollback()
: Desfaz quaisquer alterações efetuadas sobre a entidade desde o início da transação.EntityTransaction getTransaction()
: Retorna a transação doEntityManager
.
Mapeamento Objeto-Relacional (ORM)
Mecanismo sofisticado para mapeamento de objetos Java em memória para tabelas do banco de dados. Permite persistir objetos em bancos de dados relacionais. Cada instância de um objeto corresponde a um registro no banco de dados. Especificado através do uso de anotações no código.
- JPA é baseado no conceito POJO (Plain Old Java Object).
- Exemplo de provedores JPA:
- Hibernate
- JDO
- Oracle TopLink
- KODO
Entidade (Entity)
É o objeto que pode ser gravado pelo mecanismo de persistência. Entidades não são EJBs. São puramente locais e não podem ser acessadas diretamente de forma remota como os Entity Beans 2.x. Toda entidade tem de ter um construtor sem argumentos e uma chave primária.
EntityManager
Gerencia o ciclo de vida da entidade.
Ciclo de Vida de uma Entidade
New: Criada Usando a Palavra-Chave new()
Não tem ID persistente.
Managed: ID Persistente e Contexto de Persistência
persist()
- persiste uma entidade.refresh()
- atualiza o estado de uma entidade.
Removed: Marcada para Exclusão do Banco de Dados
Tem um ID persistente associado a um contexto de persistência; está escalonada para ser excluída do banco de dados.
remove()
- marca uma entidade para remoção.
Detached: ID Persistente, Sem Contexto de Persistência
Tem um ID persistente, mas não está associada com um contexto de persistência.
merge()
- sincroniza o estado de entidades desacopladas.
Mapeamento Básico de Entidades
É feito com o uso de anotações nas classes persistentes.
@Entity
- Marca uma classe como entidade persistente que deve possuir um construtor sem parâmetros.@Table
- Define o nome da tabela onde os objetos serão persistidos.@Id
- Define o atributo que constitui a chave primária.@GeneratedValue
- Define um campo auto incremento.@Column
- Define o nome da coluna onde o atributo será salvo.@Transient
- Define que um atributo não será salvo no banco de dados.
Consultas Dinâmicas
São definidas na aplicação, criadas pelo Gerenciador de Entidades através do método createQuery()
. Podem retornar uma lista de valores, semelhante a um ResultSet
; nestes casos, utiliza-se o método getResultList()
e uma variável do tipo java.util.List
.
Consultas Nomeadas (Estáticas)
São pré-definidas na classe da entidade e podem ser reutilizadas em diferentes pontos da sua aplicação, facilitando assim sua manutenção. São declaradas através das anotações @NamedQueries
(define um array de consultas nomeadas) e @NamedQuery
(define uma consulta nomeada). A maior vantagem de usar este tipo de consulta é que ela pode ser reexecutada múltiplas vezes, fornecendo diferentes parâmetros para cada execução ocorrida, enquanto nas consultas dinâmicas não teremos essa vantagem. São criadas pelo Gerenciador de Entidades através do método createNamedQuery()
.
Unidade de Persistência
É um conjunto de classes mapeadas para um banco de dados relacional. Esse mapeamento é feito através de um arquivo XML descritor de implantação chamado persistence.xml
, que é gravado na pasta META-INF
e que pode conter a configuração de várias unidades de persistência.
Contexto de Persistência (Persistence Context)
Ambiente (sessão) que envolve o conjunto de instâncias de entidades gerenciadas pelo Gerenciador de Entidades (EntityManager
).
Gerenciador de Entidades (Entity Manager)
Serviço que gerenciará o conjunto de entidades registradas dentro de um contexto, monitorando as alterações feitas nos objetos deste contexto de persistência e gravando-as no banco de dados.
Provedor de Persistência (Persistence Provider)
É como se fosse um driver JPA para uma determinada ferramenta de mapeamento objeto-relacional. Mais especificamente, é a classe que implementa a interface javax.persistence.PersistenceProvider
.
persistence.xml
Neste arquivo, definimos a unidade de persistência, o provedor JPA, a relação de classes que mapeiam entidades e as propriedades do banco de dados utilizado.
Servidor Java EE
Aplicação em Camadas - MVC
- Componentes e Contêineres
MVC (Model-View-Controller)
Provê a separação das tarefas de acesso aos dados e lógica de negócio, lógica de apresentação e de integração com o usuário, introduzindo um componente entre os dois: o Controller. O fluxo representa o ciclo de interação e o relacionamento entre cada uma das camadas.
O Controle do Fluxo Geralmente Funciona:
- O usuário interage com a interface de alguma forma (por exemplo, o usuário aperta um botão).
- O Controller manipula o evento da interface do usuário através de uma rotina pré-escrita.
- O Controller acessa o Model, possivelmente atualizando-o de uma maneira apropriada, baseado na interação do usuário (por exemplo, atualizando os dados de cadastro do usuário).
- O View obtém seus próprios dados do Model. O Model não toma conhecimento direto da View.
- A interface do usuário espera por próximas interações, que iniciarão o ciclo novamente.
Model: Representação do Domínio da Aplicação
Significa a representação do domínio que especifica a informação em que a aplicação opera.
View: Renderiza o Modelo para Interação do Usuário
"Renderiza" o Model em uma forma específica para a interação, geralmente uma interface de usuário.
Controller: Processa Eventos e Altera o Modelo
Processa e responde a eventos, geralmente ações do usuário, e pode invocar alterações no Model.
EJB - Enterprise JavaBeans
EJB (Enterprise JavaBean)
Componente de software padrão executado no lado servidor (camada de negócios) que encapsula a lógica que atende às necessidades de um domínio de negócios. É utilizado na criação de aplicações corporativas distribuídas desenvolvidas com a tecnologia Java. É um dos principais componentes da plataforma Java EE (Java Enterprise Edition).
Contêiner EJB
É o ambiente responsável por gerenciar o ciclo de vida das instâncias das classes bean (objetos EJB) dentro de um servidor de aplicações.
Servidor de Aplicações Java EE
Sistema que deve implementar os seguintes serviços:
- Enterprise JavaBeans (EJB) - Contêiner EJB
- Java Persistence (JPA)
- Java Message Service (JMS)
- Java Transaction Service/Java Transaction API (JTS/JTA)
- Servlets e JavaServer Pages (JSP) - Contêiner Web
- Java Naming and Directory Interface (JNDI)
Quando Usar EJB em Suas Aplicações:
- Quando a aplicação deve ser escalável, tanto por possuir um número crescente de usuários, quanto por poder estar distribuída em múltiplas máquinas.
- Quando transações são necessárias para garantir a integridade dos dados.
- Quando a aplicação possuir um alto número de clientes. Como a lógica de negócio fica nos componentes no lado servidor, a manutenção é facilitada.
Tipos Básicos de Enterprise JavaBeans:
Beans de Entidade - Entity Beans (JPA-Entity)
São persistentes, representam o modelo persistente de dados. São gerenciados pelo serviçoEntityManager
. Mantêm o estado conversacional entre as chamadas de um cliente para o servidor.Beans de Sessão - Session Beans
Não são persistentes e não mantêm nenhum estado conversacional entre o cliente e o servidor. São frequentemente utilizados para gerenciar as interações entre os beans de entidade. Representam um fluxo de tarefa, um processo de negócio.Beans Baseados em Mensagens - Message Driven Beans
Recebem e processam mensagens assincronamente. São utilizados na interação com outros aplicativos através de um serviço de mensagens (JMS). Não possuem interfaces Local, nem Remota. Normalmente implementam a interfaceMessageListener
, implementando assim o métodoonMessage()
onde se localiza a lógica de negócio.
Beans de Sessão - Session Beans
Stateful SessionBean (Com Informações de Estado)
Mantém o estado conversacional entre as chamadas de um cliente para o servidor, o que permite manter dados específicos ao cliente entre invocações de método. É uma extensão do aplicativo cliente. Não são mantidos em um pool de instâncias.Stateless SessionBean (Sem Informações de Estado)
Não mantém nenhum estado conversacional entre o cliente e o servidor. São mantidos em um pool de instâncias. Possuem um desempenho maior que os beans de sessão com informações de estado. São utilizados para realizar tarefas que sejam realizadas em uma única chamada de método.
Componentes de um Aplicativo que Utiliza Session Beans:
Interfaces Remota e/ou Local
- Interface Remota: Anotada com
@javax.ejb.Remote
. Define quais os métodos que um cliente tem permissão para invocar. - Interface Local: Anotada com
@javax.ejb.Local
. Define quais os métodos que outro EJB pode invocar dentro da mesma JVM.
- Interface Remota: Anotada com
Classe do Bean
Anotada com@javax.ejb.Stateless
ou@javax.ejb.Stateful
; contém a lógica de negócio, implementando os métodos descritos nas interfaces remota e/ou local e opcionalmente as interfaces de negócio.Cliente Remoto
Aplicação que se conecta ao servidor EJB. Por meio da API JNDI, ele localiza a interface remota do EJB a ser utilizado e através da referência dessa interface aciona os métodos remotos do componente EJB.
Métodos Locais e Remotos:
Métodos locais são aqueles executados dentro de uma mesma instância JVM e não possuem cópias replicadas em outros servidores. Já os métodos remotos são executados em outra instância JVM, que pode ou não estar fisicamente no mesmo servidor.