Queue escopo aplicação

8 respostas
bruno_r_santana

Olá,

Vou começar a desenvolver uma aplicação que terá uma interface com o usuário em jsp. O usuário irá clicar em um botão e o id desse usuário terá que ser adicionado em uma fila(queue).

Mas eu preciso exibir para todos usuários quem está na fila, então essa fila teria que ter escopo de aplicação. Como faço isso?

outra questão é que a classe queue tem um método peek que pega o primeira da fila, mas queria saber se tem como pegar o segundo e terceiro da fila também.

Não sei se expliquei de forma clara, mas qualquer dúvida eu explico melhor. Obrigado galera. valeu!

8 Respostas

A

cara,

vc vai ter que colocar seu objeto no ServletContext, pois assim ele vai ficar disponivel para todos da aplicação, vc pode tbm criar um listener de contexto para inicializar seu objeto.

Agora a classe Queue sempre tira o primeiro da fila, vc pode tentar fazer algo com ArrayList para o seu caso.

t+

bruno_r_santana

alissonvla:
cara,

vc vai ter que colocar seu objeto no ServletContext, pois assim ele vai ficar disponivel para todos da aplicação, vc pode tbm criar um listener de contexto para inicializar seu objeto.

Agora a classe Queue sempre tira o primeiro da fila, vc pode tentar fazer algo com ArrayList para o seu caso.

t+

Acho que essa solução com ServletContext vai dar certo, mas não manjo nada disso e não achei muito material explicando sobre isso de forma clara na net. Preciso colocar dois ArrayList e uma Queue nesse ServletContext e depois conseguir preencher essas listas e fila com dados e recuperar esses dados a partir de qualquer servlet. Alguém tem algum exemplo de como fazer isso ou algum tutorial? Obrigado.

FernandoFranzini

Vc acha isso em qualquer bom livro de servlet e JSP - http://www.amazon.com/Head-First-Servlets-JSP-Certified/dp/[telefone removido]

bruno_r_santana

Olá,

Eu baixei um pdf desse livro que citou mas aparentemente não fala de ServletContext. Baixei em http://search.4shared.com/postDownload/_Y7p3MLT/Head_First_Servlets_and_JSP.html

Alguém mais tem sugestões ou material de apoio?

Obrigado a todos

bruno_r_santana

Olá pessoal,

Eu consegui colocar um objeto no ServletContext, mas precisava que esse objeto, no caso um ArrayList fosse criado no momento que a aplicação fosse iniciada. No meu servlet coloquei assim para criar o ArrayList e jogá-lo no ServletContext:

ArrayList<String> analistasLogados = new ArrayList<String>(); analistasLogados.add(usuario.getNome()); ServletContext context = request.getSession().getServletContext(); context.setAttribute("logados", analistasLogados);

Na jsp precisei pegar o conteúdo do ArrayList e fiz assim:

ServletContext context = request.getSession().getServletContext(); ArrayList<String> analistasLogados = (ArrayList<String>)context.getAttribute("logados"); for(int i=0;i<analistasLogados.size();i++){ out.println((String)analistasLogados.get(i)); }

No xml está assim:

logados analistasLogados

O problema é que toda vez que eu chamo o Servlet ele recria o ArrayList. Tem alguma forma de inicializar o ArrayList junto com a aplicação ao invés de criá-lo no código fonte do Servlet?

Obrigado

FernandoFranzini

Vc tem 2 opções:

  1. É só vc fazer um if antes ver se ele ja existe
    ou
  2. Faça um listener de contexto que é invocado no deploy…
    Ta tudo no livro kkkkkkkkkkk
bruno_r_santana

Agora que eu vi, quando eu digitava ctrl + f para pesquisar só tava pesquisando os textos do rodapé do pdf. O livro tava sem ocr, acho que é assim que fala quando o texto fica como se fosse uma figura. Eu baixei outro livro igual mas com ocr e agora consegui pesquisar nele com ctrl + f. Vou dar uma lida e qualquer coisa posto de novo…kkkkkkkk

Obrigado mesmo.

bruno_r_santana

Deu certo pessoal. Obrigado a todos e principalmente ao FernandoFranzini! Caso alguém mais tenha a mesma dúvida fiz assim:

No meu xml:


logados
analistasLogados


MyServletContextListener

Meu listener de contexto:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

import javax.servlet.*;

public class MyServletContextListener implements ServletContextListener{
	public void contextInitialized(ServletContextEvent event){
		ArrayList<String> analistasLogados = new ArrayList<String>();
		ServletContext context = event.getServletContext();
		context.setAttribute("logados", analistasLogados);
	}
	
	public void contextDestroyed(ServletContextEvent event){
		//
	}
}
No servlet:
ArrayList<String> analistasLogados = (ArrayList<String>) getServletContext().getAttribute("logados");
				String analista;
				boolean logado = false;
				for(int i=0;i<analistasLogados.size();i++){
					analista = (String)analistasLogados.get(i);
					if(analista.equals(usuario.getNome())){
						logado = true;
					}
				}
				
				if(logado == true){
					request.getSession().removeAttribute("erro");
					response.sendRedirect("/pausa/sistema");
				}else{
					analistasLogados.add(usuario.getNome());
					request.getSession().setAttribute("nome", usuario.getNome());
					request.getSession().removeAttribute("erro");
					response.sendRedirect("/pausa/sistema");
				}
Na jsp:
<%
			ArrayList<String> analistasLogados = (ArrayList<String>) getServletContext().getAttribute("logados");
			for(int i=0;i<analistasLogados.size();i++){
				out.println((String)analistasLogados.get(i) + "<br>");
			}
		%>
Criado 29 de novembro de 2011
Ultima resposta 28 de dez. de 2011
Respostas 8
Participantes 3