Concorrência na leitura de arquivos no FileSystem

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.