Pessoal,
Imaginem que uma aplicação precise alterar um arquivo em disco de forma concorrente (várias threads o acessando). Existe ainda a possibilidade de “alguém” externo a aplicação abrir ou até mesmo alterar esse arquivo.
Qual a maneira ótima para garantir integridade nesse caso? Existe alguma biblioteca no Java ou Open Source para cuidar disso?
Aparentemente o mais simples seria utilizar synchronize nos métodos que manipulam o arquivo dentro do programa Java, mas queria saber se tem algo que daria maior performance, e principalmente tratar a concorrência também para usuários que mexam no arquivo de fora do programa Java (que o Synchronize sozinho não resolve).
Obrigado
Você precisa usar “file locks”.
Procure em http://java.sun.com/javase/6/docs/api/java/nio/channels/FileLock.html
Normalmente bancos de dados não trabalham com arquivos acessados por múltiplos processos; eles deixam isso a cargo de um servidor. Assim eles evitam o problema de locks de arquivos, que são altamente dependentes do sistema operacional e costumam ter muitos problemas de falhas.
talvez seja um pouco arriscado vc deixar o arquivo diretamente se acessado, mesmo que vc crie um mecanismos de concorrencia.
vc poderia criar uma facede de acesso o arquivo para receber as requisições. essa facede recebe os comando de manipulação do arquivo e os enfilera num fila JMS, por exemplo, tratando as requisiões sequencialmente.
uma alternativa.
abraços.