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
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.
[quote=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.[/quote]
Humm acho que entendi, se entendi certo o proprio Servelts toma conta das instancias par não haver subscricao dos dados, correto??
certo… cada solicitação do cliente é uma thread diferente… quando o usuario submete a pagina sua solicitação é encapsulada em uma thread…
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.