• Nenhum resultado encontrado

Aula 19

N/A
N/A
Protected

Academic year: 2021

Share "Aula 19"

Copied!
8
0
0

Texto

(1)

Servidores de Aplicação

Aula 19

(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 19: Message Driven Beans – Parte II

Objetivo: Finalizar o aplicativo iniciado na aula 18, desenvolvendo o módulo web.

Criando o Bean Singleton

Nas aulas 16 e 17 foi criado um bean do tipo Singleton, uma forma mais simples de implementar um EJB que exista no servidor, apenas quando o aplicativo ao qual ele pertence estiver sendo executado.

Selecione o nome do módulo web com o botão direito do mouse e use as opções “Novo -> Bean de Sessão”. A forma de declará-lo é similar à forma de criar um bean de sessão, mas, em vez de usar Stateless ou Stateful, use a opção Único (Singleton). Nesse exemplo será usado o nome “GerenciadorSessao”. Isso fará com que seja criado o arquivo “GerenciadorSessao.java”.

Para que ele consiga contar os usuários conectados, ele precisa da anotação @WebListener associada à declaração dessa classe, que deve ser conectada a uma função de “escuta” do servidor web chamada HttpSessionListener.

Quando essa alteração for feita, o Netbeans mostrará o ícone , indicando que há alguma correção a fazer no código. Clique sobre o ícone e selecione a opção “Implementar Todos os Métodos Abstratos”, fazendo com que sejam criados os métodos sessionCreated e sessionDestroyed, chamados pelo servidor quando a sessão de conexão é criada (aplicação iniciada) ou destruída (aplicação encerrada). Esses métodos serão usados para incrementar e decrementar a variável contadora de sessões “contador”. Por último, crie um método que informe o número de conexões ativas, cujo código é listado a seguir:

public int getContagemSessoes() { return contador;

(4)

Servlet ListarMensagens

Neste momento deve ser criado um Servlet que liste todas as mensagens armazenadas no servidor. Crie esse Servlet do mesmo modo feito nas aulas anteriores, clique no nome do módulo web e use as opções “Novo -> Servlet” para configurar e criar a classe “ListarMensagens.java”.

Depois que essa classe for criada, clique com o botão direito do mouse na linha abaixo da declaração “public class ListarMensagens extends HttpServlet” e use as opções “Inserir Código -> Chamar Enterprise Bean” para adicionar as seguintes instruções ao Servlet:

@EJB

private MensagensFacade mensagensFacade. @EJB

private GerenciadorSessao gerenciadorSessao.

Essas instruções conectam o Servlet aos vários beans de sessão que serão usados para ter acesso à base de dados de mensagens para poder manipulá-las.

No Servlet, procure o método processRequest e insira o código listado a seguir, logo após a declaração do método processRequest.

request.getSession(true).

Essa instrução é usada para que seja obtido o identificador da sessão atual ou para criar uma nova. Esse resultado acionará os métodos sessionCreated e sessionDestroyed do bean GerenciadorSessao. Depois, ainda dentro do método processRequest, insira o código listado a seguir para que os dados lidos da base de dados sejam decodificados e formatados em uma página HTML que será apresentada ao usuário final.

(5)

List news = mensagensFacade.findAll(); for (Iterator it = news.iterator(); it.hasNext();) { Mensagens elem = (Mensagens) it.next();

out.println(" <b>" + elem.getTitulo() + " </b><br />"); out.println(elem.getMensagem() + "<br /> ");

}

out.println("<a href='InserirMensagem'>Postar nova mensagem</a>");

Após inserir esse código, adicione as instruções seguintes para que apareça o número de usuários lendo as mensagens que estão sendo postadas.

out.println("<br><br>");

out.println(gerenciadorSessao.getContagemSessoes() + " usuários lendo as mensagens").

Criando o Servlet InserirMensagem

Agora, será criado o Servlet InserirMensagem, que será usado para enviar mensagens. Ele utilizará anotações para injetar os recursos JMS que criamos diretamente no servlet, especificando o nome variável e o nome para o qual é mapeado. Depois, será adicionado o código para enviar a mensagem JMS e o código para o formulário HTML para adicionar uma mensagem.

O Servlet é criado como os demais, por meio da opção “Novo -> Servlet”. Após a realização do Servlet, adicione as anotações listadas a seguir, a fim de que ele possa acessar o provedor de JMS (jms/NovaMansagemFactory) e o próprio serviço JMS (jms/NovaMansagem) no servidor de aplicações:

@Resource(mappedName="jms/NovaMansagemFactory") private ConnectionFactory connectionFactory.

@Resource(mappedName="jms/NovaMansagem") private Queue queue.

(6)

Depois, no método processRequest() do Servlet, é necessário adicionar o seguinte código-fonte:

if ((titulo != null) && (mensagem != null)) { try {

Connection connection = connectionFactory.createConnection();

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE).

MessageProducer messageProducer = session.createProducer(queue); ObjectMessage message = session.createObjectMessage().

Mensagens e = new Mensagens(). e.setTitulo(titulo). e.setMensagem(mensagem). message.setObject(e). messageProducer.send(message). messageProducer.close(). connection.close(). response.sendRedirect("ListarMensagens"). } catch (JMSException ex) {

ex.printStackTrace(). }

Nesse código, a instrução “if ((titulo != null) && (mensagem != null))” verifica se o Servlet recebeu esses parâmetros do formulário HTML e, se houver valores, ele iniciará o procedimento para inserir esses dados no banco de dados. Assim, a instrução “Connection connection = connectionFactory.createConnection();” criará uma conexão ao provedor de JMS do servidor de aplicações.

A instrução “Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);” cria a sessão de comunicação com o provedor de JMS. Depois, as instruções “MessageProducer messageProducer =

session.createProducer(queue);” e “ObjectMessage message =

session.createObjectMessage();” realizarão uma fila que processará as mensagens e a criação de uma posição para elas dentro dessa fila.

(7)

Após, as instruções geram o objeto na memória que será enviado para a fila de mensagens por meio da instrução “messageProducer.send(message);”. Assim que a mensagem for enviada, as sessões serão encerradas pelos métodos close(), e o processamento dessas mensagens ficará a cargo do servidor de aplicações, que as processará de acordo com a prioridade de tarefas que ele tem para executar. Como as operações são assíncronas, quando uma mensagem é gravada na base de dados, pode ocorrer que o Servlet que lista as mensagens acesse a base de mensagens antes que a última tenha sido gravada, fazendo com que ela não apareça na lista.

A última alteração nesse Servlet é a adição do código listado a seguir:

out.println("<form>").

out.println("Título: <input type='text' name='titulo'><br/>");

out.println("Messagem: <textarea name='mensagem'></textarea><br/>"); out.println("<input type='submit'><br/>");

out.println("</form>");

Esse código será usado para montar o formulário que interagirá com o usuário, ou seja, é o lugar onde ele digita as mensagens que serão armazenadas na base de dados.

* 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

Finalizamos aqui o desenvolvimento de aplicativos distribuídos, usando um exemplo que aplica um serviço, por meio da API JMS.

Na aula 20 abordaremos algumas questões a respeito da plataforma Java EE, tentando esclarecer alguns pontos que tenham ficado em aberto.

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

A assistência da equipe de enfermagem para a pessoa portadora de Diabetes Mellitus deve ser desenvolvida para um processo de educação em saúde que contribua para que a

Os relatos evidenciam as marcas de Bertha na memória de seus familiares e pessoas de convívio, com alusões às datas comemorativas, quando a casa era aberta aos convidados, e ao

Para o ensino do basquete tendo como proposta pedagógica a Psicomotora os objetivos terão, portanto, que levar em consideração o ser em todos os aspectos já citados, e não apenas

Vantagens. Permitem avaliar melhor as atitudes para análise das questões estruturadas;. São muito úteis como primeira questão de um determinado tema porque deixam o

Se o tendão formar um ângulo aberto para fora, estamos diante de um calcâneo valgo, e o apoio sobre ele deve ser maior do lado interno (Figura 6). Se o tendão parecer oblíquo de

Analisando a prática dos professores de Educação Física de Piracicaba, Moreira (1991) constatou que eles apresentam atitudes formais e autoritárias na relação com os alunos; vêem

Samuel Tabosa de Castro.. Dedicamos esta proposta a todas as pessoas portadoras de deficiência atendidas pelas APAEs, por acreditarmos em seu potencial de aprendizagem e

É o movimento humano com determinado significado/sentido, que por sua vez, lhe é conferido pelo contexto histórico-cultural. O movimento que é tema da educação física é o que