estou desenvolvendo um projeto Web com JSF e estou com uma duvida referente a projeto…
bom… eu tenho uma pagina com a listagem de Proposta (um DataTable).
ao clicar em editar ele redirecina para pagina onde eu irei editar a proposta…
bem tranquilo… padrão!
porem 2 usuarios podem editar a mesma Proposta…
ex.: o usuaio “Jose” clicou em editar e esta alterando a proposta… dai o usario “Manoel” tambem vai editar…
dai pode ocorrer conflitos de informação (quem salvar por ultimo ganha)
gostaria de saber como proceder neste caso!!!
ate pensei em fazer alguma especie de bloqueio de recurso… mais não faço a minima ideia de como fazer algo assim…
Bom, vc pode fazer de várias formas isso, uma delas é isso que vc falo mesmo, concorrência otimista, o ultimo que salvar é o que vai ficar na base de dados, agora vc pode fazer esquema de lock por entidade por exemplo, o EJB fornece isso, e pode fazer um esquema de expirar lock, que enquanto o cara estiver na tela, vc faz um requisião a cada 1 minuto por exemplo em ajax, que aumenta o tempo do lock, agora isso pode ser feito de diversas formas tb, depende da sua arquitetura mesmo, ou regra de negócio.
criei um bean e coloquei no escopo da aplicação…
este bean possui um Map onde consta a viewId e o usuario…
criei uma CustomTag chamada lock… coloco nas paginas que serão bloqueadas…
atraves de um PhaseListener eu verifico se o viewId esta bloqueado ou não… e deixo o cara acessar ou não…
ate aqui eu consegui chegar…
eu queria assim:
meu DataTable tem 2 registros… ( Reg1 e Reg2 )
se o usuario “Jose” estiver editando o “Reg1” o usuario “Manoel” não podera editar o “Reg1”… porem ele podera editar o “Reg2”…
oq esta acontecendo:
se o “Jose” estiver editando o “Reg1” o “Manoel” não consegue editar nada… pq ele bloqueia a viewId
public class LockEditResource {
private Map<String,String> lockResource;
public LockEditResource() {
lockResource = new HashMap<String,String>();
}
public boolean isLock(String resource){
return lockResource.containsKey(resource);
}
public boolean isLockForMe(String owner){
return lockResource.containsValue(owner);
}
public void addLock(String resource, String owner){
lockResource.put(resource, owner);
}
public void removeLock(String resource){
lockResource.remove(resource);
}
}
o problema e q estou bloqueando a pagina q edita… dai qnd ela esta com o “lock” nehum outro usuario consegue acessar… ou seja, ninguem mais consegue editar qlqr outro regitro do table…