2013-08-08 16 views
7

Rozważam użycie Apache Commons VFS dla projektu, który będzie musiał przesyłać pliki między serwerem lokalnym a serwerami zdalnymi za pośrednictwem ftp, sftp i https.Apache Commons Bezpieczeństwo wątków VFS i zarządzanie zasobami

Standardowe przykłady użycia otrzymujesz FileSystemManager od statycznej metody

FileSystemManager fsManager = VFS.getManager(); 

Czy można bezpiecznie korzystać z tego samego FileSystemManager w wielu wątków?

A drugie pytanie jest o odpowiednio zwalniania zasobów w bloku finally: Uważam następujące metody w API Javadoc:

Ale to nie jest jasne dla mnie, który z tych zasobów powinien być zazwyczaj zamknięty.

+0

Mam te same wątpliwości w tej chwili, błąkałem się, jeśli doszło do jakichkolwiek wniosków? –

Odpowiedz

1

Menedżer plików i obiekty systemu plików mają być bezpieczne dla wątków, jednak nie postawiłbym mojego życia na nim. Niektóre wewnętrzne blokady (szczególnie wokół nazw) zależą od instancji FileObject, więc nie powinieneś używać FileCache, który ich nie zachowuje (tzn. Domyślna pamięć podręczna jest w porządku).

FileContent i strumienie nie powinny być używane jednocześnie (w rzeczywistości plik FileContent.close() działa na przykład tylko w strumieniach bieżącego wątku).

Istnieje kilka wycieków zasobów w tym obszarze (mam nadzieję, że wszystkie zostały naprawione w 2.1-SNAPSHOT).

0

VFS.getManager zapewnia jeden menedżer, tj. jeden dostęp do systemu plików, więc nie zalecam używania go w środowisku wielowątkowym. Możesz utworzyć własny DefaultFileSystemManager i po zakończeniu użyć metody close.

Powiązane problemy