Проверка OverlappingFileLockException для метода lock() класса FileChannel

Это правило помечает использование метода java.nio.channels.FileChannel.lock(). В Java SE 6 метод lock() стал выбрасывать java.nio.channels.OverlappingFileLockException.

Это правило помечает вызовы lock() не в блоке try/catch с обработкой OverlappingFileLockException или если в спецификаторе throws объемлющего метода не указано OverlappingFileLockException.

Пример 1:

public MyClass{
private void doX(){
FileChannel fc= getFileChannel();
fc.lock();
}
}

Пример 2:

public MyClass extends FileChannel{
private void doX(){
super.lock();
}
// дополнительный код
}

Пример 3:

public MyClass extends FileChannel{
private void doX() throws OverlappingFileLockException{
super.lock();
}
private void doY() {
try{
super.lock();
catch {OverlappingFileLockException e} {}
}
// дополнительный код
}

В примере 1 помечается вызов fc.lock().

В примере 2 помечается вызов super.lock().

В примере 3 ничего не помечается, так как метод doX() уже выбрасывает OverlappingFileLockException, а метод doY() обрабатывает OverlappingFileLockException.

В Java SE 6 добавлено системное свойство sun.nio.ch.disableSystemWideOverlappingFileLockCheck для управления проверкой файлов java.nio.channels.FileChannel.lock.

См. пункт 4 руководства Совместимость с Java SE 6.