ArrayList unica e atualizada no Tomcat

3 respostas
J

Estou fazendo uma fila de Clientes na WEB tipo o suporte só pode atender 3 então os que chegarem como 4º ou 5º precisam ficar numa fila de Espera.
Para isso uso uma classe contendo um ArrayList instanciado .
deixando visivel a posição que cada usuários que entrar ver.
tipo :

Você é o 1º da fila.
Você é o 2º da fila.
para outro usuário exibe ele como o 3º

meu problema é q em cada REFRESH de 3 segundos.
é atribuido o primeiro da lista 1º ( beleza aqui ele é atendido )
mas o 2º da fila também é e todos que tiverem na fila são atendidos, e isso não pode acontecer.
não sei pq para cada sessão os suporte se torna como sendo livres para atender e naõ estão …

e eles estão instanciados uma unica vez na memória .

preciso usar no método um syncronized para não se encontrar de uma vez todos ? algo assim ?

3 Respostas

C

Jhieiy,

Tá meio confuso sua descrição do problema. Será que vc poderia dar mais detalhes do problema.

@braços,
Cleiton

J

O fato de estar atendendo todos da lista, depende do seu codigo e de como foi implementado.

Só uma dica, existem classes mais especificas para o tratamento de filas do que ArrayList, um exemplo é a interface Queue:

http://java.sun.com/javase/6/docs/api/java/util/Queue.html

J

Ah Desculpe Cleiton, vamos lá:

cada cliente fica numa fila de espera isso acontece pq os atendentes estão todos ocupados.
então fica numa jsp a mensagem VOCÊ é o 1 da fila, e assim por diante.
isso está correto, eu armazeno esses novos clientes numa arrayList que já está instanciada desde o inicio como:

private List<ClienteVO> clientesFila = new ArrayList<ClienteVO>();

e meus suportes técnicos online também porem todos ocupados:
private Map<String, SuporteBean> suportes = new Hashtable<String, SuporteBean>();

daí na fila de espera na tela de aguarde.jsp

eu fico dando REFRESH de 3 segundos, e nisso eu verifico se algum dos suportes já se desocuparam.

algo do tipo

for (int j = 0 ; j < suportes.size(); j++) {

SuporteBean suporte = suportes.get(j);

if (suporte.getClientes().isEmpty()) {

// ADICIONA ENTÂO UM CLIENTE  DA FILA

break;

}

}

é isso , o problema é :

o primeiro da fila entra no if e é adicionado sem problemas.
já o segundo usuário na fila entra também, !! ou seja parece que não foi atualizado a minha HASH “suportes” !! mto estranho isso
e isso deixa que todos que estão na Fila entrem nele sem problemas !!!
onde na verdade deveria barrar…

Criado 30 de outubro de 2007
Ultima resposta 30 de out. de 2007
Respostas 3
Participantes 3