Duvida sobre vários usuários

5 respostas
analyser

Olá tenho uma duvida que me apareceu, bem tenho um sistema web feito em mvc utilizando padrao dao e tal, não seria possivel por exemplo, os dois usuários acessando um cadastro ai vai para a servelts que seta o DAO, ai seto o meu Javabens e o outro tb, ai nao daria problema caso to setando de um adiciona.setName() e to sentando o resto, mais ainda o primeiro não mandou o objeto para o DAO, ta setando o restante, ai vem o outro usuário e começa a setar tb, adiciona.setName(), não iria sobescrever a minha aplicao, nossa fico meio enrolando mais espero que entendao

FAlow

5 Respostas

kicolobo

Uou que lance complicado! [:)]

Seguinte: vão haver diversas instâncias (cada qual em um thread separado) dos servlets carregadas pelo seu servidor. E cada uma destas estará em um momento específico com um usuário específico.

A não ser, é claro, que você esteja usando métodos estáticos. Aí pode ser que você tenha algum problema, porque todos os threads irão acessar os mesmos dados. O problema pode ser reduzido (em parte, apenas em parte) se você definir alguns de seus métodos como synchronized.

analyser

kicolobo:
Uou que lance complicado! [:)]

Seguinte: vão haver diversas instâncias (cada qual em um thread separado) dos servlets carregadas pelo seu servidor. E cada uma destas estará em um momento específico com um usuário específico.

A não ser, é claro, que você esteja usando métodos estáticos. Aí pode ser que você tenha algum problema, porque todos os threads irão acessar os mesmos dados. O problema pode ser reduzido (em parte, apenas em parte) se você definir alguns de seus métodos como synchronized.

Humm acho que entendi, se entendi certo o proprio Servelts toma conta das instancias par não haver subscricao dos dados, correto??

luistiagos

certo… cada solicitação do cliente é uma thread diferente… quando o usuario submete a pagina sua solicitação é encapsulada em uma thread…

marcos.junqueira

Respira ai cara… :lol:

R

O que está dentro de um método só é visto pela thread executando o método. Para evitar problemas de concorrência coloque os objetos que devem ser utilizados no escopo do método e não em atributos da classe da thread.

Em casos complexos utilize java.util.concurrent para trabalhar com lock.
No caso de um Servlet cada doPost() ou doGet() é uma transação e os objetos criados para atender essa requisição são visíveis na thread , então se dois chegam quase ao mesmo tempo estão usando instâncias diferentes.

Isso pode ser diferente com singletons , etc… mas em aplicações clássicas é tranquilo.

Usar synchronized resolve porém via deixar lento. Use com cuidado.

Espero ter ajudado.

Criado 27 de julho de 2007
Ultima resposta 27 de jul. de 2007
Respostas 5
Participantes 5