Java 7 NIO-Überwachungsdienst vs jpathwatch

8

Das Projekt, an dem ich arbeite, verwendet Java 6 und jpathwatch (.95) und aktualisiert jetzt Java 7. Derzeit auf Windows 7 und 2008 Server. Ich überarbeite Codebereiche, um den neuen Java 7 NIO zu verwenden, und bin relativ geradlinig - sogar mit dem NIO.2, um jpathwatch zu ersetzen. Der Dateiüberwachungsbereich unseres Codes begann jedoch mit dem Fehlschlagen von Komponententests. Es scheint, dass der Java 7 NIO Änderungen in UNC-Pfaden auf andere Maschinen nicht aufgreift -

%Vor%

Um zu testen, implementierte ich den Code von der Java NIO Tutorial-Seite Ссылка und Dann wurde ein doppeltes Klassen-Swapping in den jpathwwatch-Importen anstelle der Java-NIO-Importe erstellt. jpathwatch funktioniert für die UNC-Pfade, Java NIO jedoch nicht. Es scheint zu registrieren und gibt sogar einen anfänglichen Ereignisschlüssel für den Standort zurück: (Beispielausgabe)

%Vor%

erkennt dann aber nie weitere Änderungen.

jpathwatch registriert und meldet Verzeichnis- und Dateiereignisse (obwohl es das anfängliche Ereignis nicht direkt nach der Registrierung meldet).

%Vor%

Dies ist trotz der Beobachtung in der jpathwatch-Diskussion, dass das Beobachten im Netzwerk NICHT unterstützt wird - beachten Sie die Antwort von Uwe Pachler auf UNC-Pfade - Ссылка

Hat irgendjemand Glück gehabt mit UNC-Pfaden und Java 7 NIO.2? Irgendwelche anderen oder neueren Lösungen?

Danke,

-mjash

    
mjash 02.10.2013, 15:01
quelle

3 Antworten

2

Es sieht so aus, als wäre dies ein Fehler im JDK, der in JDK 1.7.0_u60 behoben wurde. Ich habe gerade versucht, U71 (hatte u45) und verifiziert, es funktioniert jetzt für mich über eine UNC.

    
NBW 29.10.2014 20:53
quelle
0

Wenn Sie das Lernprogramm und die Beispiele aus der Oracle-Dokumentation zu WatchEvent verwenden, haben Sie möglicherweise nach der Übergabe des Ereignisses den Aufruf von key.reset () verpasst. Ich bin gerade auf dasselbe Problem gestoßen:

%Vor%     
colson 14.10.2013 02:27
quelle
0

Obwohl es keine wirklich klare Beschreibung über UNC-Pfade und Remote-Dateisysteme im Allgemeinen gibt, habe ich Folgendes herausgefunden:

Zunächst scheint es möglich zu sein, einen WatchKey zu registrieren, aber sofort wird der WatchKey ungültig ( WatchKey.isValid() ).

Wegen der direkten Verbindung zum Dateisystem ist es Es ist nicht möglich, einen WatchKey an einem entfernten Standort zu registrieren.

Mögliche Problemumgehungen:

1. Remote FileWatcher

Geben Sie eine Liste mit Pfaden frei, die Sie einem Remote-JVM ansehen können, und leiten Sie die Änderungen an Ihren Computer weiter.

2. Abfrage

Die andere Problemumgehung wäre ein Poller (nur zu empfehlen, wenn nicht zeitkritisch).
Wenn Sie ständig pollen würden, würde dies viel Netzwerkverkehr verursachen.

Wäre schön, entweder eine Exception bei der Registrierung zu einem Remote-Pfad zu erhalten oder zumindest im Abschnitt When to Use and Not Use This API zu lesen.

    
Franz Ebner 01.01.2014 23:58
quelle

Tags und Links