• Nenhum resultado encontrado

Aula 14

N/A
N/A
Protected

Academic year: 2021

Share "Aula 14"

Copied!
8
0
0

Texto

(1)

Servidores de Aplicação

Aula 14

(2)

Este material é parte integrante da disciplina oferecida pela UNINOVE.

O acesso às atividades, conteúdos multimídia e interativo, encontros virtuais, fóruns de discussão e a comunicação com o professor devem ser feitos diretamente no ambiente virtual de aprendizagem UNINOVE.

Uso consciente do papel.

(3)

Aula 14: Exercício de JPA – Parte II

Objetivo: Finalizar o exercício de JPA iniciado na aula 13.

Introdução

Na aula 13, iniciou-se o desenvolvimento de um aplicativo cliente que acessa um componente remoto para acessar a base de dados, que usa a JPA para isso. A aula 13 mostrou a preparação dos componentes nas várias camadas, e finalizou com a chama ao mecanismo que inicia a persistência dos objetos armazenados em memória na base de dados. Nesta aula, vejamos como realizar as demais operações de acesso às bases de dados com JPA. No final da aula, haverá um link para um vídeo demonstrativo do que é explicado aqui.

Selecionando dados do objeto

Para consultar os dados do banco, adicione o método a seguir ao arquivo “ClienteBean.java”:

public List<Cliente> consultaTodosClientes(){

Query query = em.createQuery("SELECT c FROM Cliente c"); List<Cliente> clientes = (List<Cliente>)query.getResultList(); return clientes;

}

A consulta de todos os dados é feita por meio da instrução “Query query =

em.createQuery("SELECT c FROM Cliente c");”, em que o método createQuery do

gerenciador de entidades executa o comando “SELECT c FROM Cliente c”. Esse comando usa a sintaxe JPQL, derivada da linguagem SQL ANSI. O resultado dessa consulta é armazenado na variável query, que guarda em memória todo o resultado da consulta no banco de dados.

(4)

Esse resultado é armazenado na variável query sob a forma de uma lista de dados e para tratá-la é usado o método getResultList(). Para lidar melhor com eles, faça com que a lista tenha a forma da entidade cliente (também chamado casting) e crie uma instância dessa lista, que receba a que tem o resultado da consulta, já convertida para o formato que ela espera, através da instrução “List<Cliente> clientes = (List)query.getResultList();“. Por último, o método devolve a instância da lista com a estrutura da entidade cliente por meio da instrução “return clientes;”.

O método “public List consultaTodosClientes()” criado para consultar todos os

dados existentes na tabela precisa ser refletido na interface (arquivo “ClienteBeanRemote.java”) , que deverá ter um código semelhante a este:

@Remote

public interface ClienteBeanRemote {

public void cadastrarCliente(String nome, Long id, Integer telefone, Date data);

public List<entidades.Cliente> consultaTodosClientes(); }

Para testar o comando SQL de consulta de todos os registros existentes na tabela do banco de dados, é necessário alterar a aplicação desktop para ler os dados da tabela. Para isso, a classe main (no arquivo Main.java) da aplicação desktop precisa do código listado abaixo:

List<Cliente> clientes = testeEJB.consultaTodosClientes(); if(clientes.isEmpty()){

System.out.println("Não há dados na tabela Cliente"); return;

}

String texto = "";

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); for(int i = 0; i < clientes.size(); i++){

texto += "Dados do cliente ";

texto += clientes.get(i).getNome() + "\n";

(5)

texto += "telef.: " + clientes.get(i).getTelefone() + "\n"; texto += "Dt Cad: " + sdf.format(clientes.get(i).getDataCadastramento()) + "\n"; texto += "\n\n"; } System.out.println(texto).

No vídeo disponível no AVA, o código-fonte do arquivo “Desktop.java” foi modificado para poder realizar várias vezes o teste e evitar redundâncias. Após realizar as alterações, recompile o módulo EJB (opção “Limpar e Construir” do menu que aparece quando o nome do projeto é selecionado com o botão direito no mouse) e o atualize no servidor de aplicações (opção “Implantar” do menu que aparece quando o nome do projeto é selecionado com o botão direito no mouse). Depois disso, basta pedir para executar o aplicativo desktop, o qual deve apresentar um resultado semelhante ao da Figura 1.

(6)

Selecionando um registro da tabela

Para consultar um item específico da tabela, é possível usar o método find(id_do_objeto) do gerenciador de entidades. Esse método é o mecanismo de JPA para selecionar um item específico, e ele será adicionado ao EJB por meio do seguinte código:

public Cliente consultaCliente(Long idCliente){

Cliente cli = em.find(Cliente.class, idCliente); return cli;

}

A linha de código “Cliente cli = em.find(Cliente.class, idCliente);” criará uma instância da entidade cliente, que receberá os dados relacionados à consulta feita pelo método find() do gerenciador de entidades, a partir do id do cliente. Depois, o comando “return cli” devolverá o resultado a quem solicitou a execução desse método para o EJB. Para que ele seja acessível para o cliente, é necessário refleti-lo na interface remota.

Após alterar o EJB e atualizá-lo no servidor de aplicações, modifique o arquivo “Desktop.java”, criando um método que lista apenas um cliente, usando o código a seguir:

Cliente cliente = testeEJB.consultaCliente(idCliente);

System.out.println("O nome do cliente do código " + idCliente.toString() + " é " + cliente.getNome().toString());

Após fazer as alterações, a aplicação deve ter o resultado parecido com o da Figura 2.

(7)

Atualizando e excluindo dados

A JPA ainda provê os métodos merge() e remove(), usados para atualizar as informações do objeto na base de dados, como se fosse o comando SQL updade, e remove o registro da base de dados, equivalente ao comando delete de SLQ, respectivamente.

Para o caso do método remove(), ele é obrigatoriamente usado com o método merge(), como no exemplo:

cli = em.merge(cli). em.remove(cli).

Para o teste serão implementados dois métodos no EJB. Um para atualizar e outro para remover um registro do servidor. Consequentemente, o cliente Desktop também será modificado para poder realizar esse teste, conforme pode ser observado no vídeo demonstrativo no AVA.

* O QR Code é um código de barras que armazena links às páginas da web. Utilize o leitor de QR Code de sua preferência

(8)

Conclusão

Com este exercício demonstramos como os métodos de JPA podem ser usados dentro de um EJB. Para a maioria das tarefas, foram usados os métodos

find(), merge(), remove(), etc., mecanismos providos pela JPA.

A exceção foi o método que lista todos os registros que existem na tabela. Aqui, optamos por escrever um comando SELECT para demonstrar como o desenvolvedor pode construir um comando SQL que não seja atendido por JPA. Por exemplo, o método find() consulta um item específico na tabela, mas exige que lhe seja informado o id do objeto a ser pesquisado. Se for necessário construir uma consulta que busque um ou mais registros usando outro parâmetro diferente do id, aquele é o mecanismo a ser usado, escrevendo um comando SELECT que tenha uma cláusula de pesquisa diferente do id. Para o caso de se querer que o software pesquise todos os itens de uma tabela, o desenvolvedor pode usar o método

findAll(), provido por JPA com essa finalidade.

Chegamos ao final desta aula. Agora, acesse o AVA para ver o video

mencionado na aula. Caso fique alguma dúvida, leve a questão ao Fórum e divida-a com seus colegas e professor.

REFERÊNCIA

KEITH, Mike.; SCHINCARIOL, Merrick. EJB 3 Professional: Java Persistence API. United States of America: A Press, 2008.

Referências

Documentos relacionados

Por isso, respondendo a Heurgon acerca de sua tese, Le Goff sinalizou que em função de suas leituras, havia conquistado certa familiaridade com o conjunto da Idade Média,

Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for

Mestrado em Administração e Gestão Pública, começo por fazer uma breve apresentação histórica do surgimento de estruturas da Administração Central com competências em matéria

Posteriormente, em Junho de 1999, ingressei no grupo Efacec, onde fui responsável pela elaboração de projetos e propostas para a construção de Estações de Tratamento

Membro_Faculdade (Matrícula: Inteiro, Nome: string[50], Carga: Inteiro, IniContrato: data, Curso: string[30], professor: booleano, aluno: booleano). Membro

Estes resultados apontam para melhor capacidade de estabelecimento inicial do siratro, apresentando maior velocidade de emergência e percentual de cobertura do solo até os 60

Entendendo, então, como posto acima, propõe-se, com este trabalho, primeiramente estudar a Lei de Busca e Apreensão para dá-la a conhecer da melhor forma, fazendo o mesmo com o

A variação do pH da fase móvel, utilizando uma coluna C8 e o fluxo de 1,2 mL/min, permitiu o ajuste do tempo de retenção do lupeol em aproximadamente 6,2 minutos contribuindo para