Mac: JSF: Warum erfassen JSF-Webanwendungen in der Entwicklungsphase Änderungen an Verbundkomponenten nicht immer?

Mac OS X: Yosemite 10.10.5
NetBeans8.1beta or NetBeans8.1
Glassfish4.1 or Glassfish4.1.1
Mojarra 2.2.7 or 2.2.12 [2016-08-14 EDIT: or 2.2.8-17]
[EDIT: Primefaces 5.3]

Ich bin ein erfahrener NetBeans + JSF-Entwickler, das heißt, ich weiß, wie es funktionieren soll und normalerweise, aber aus irgendeinem Grund funktioniert dies nicht mehr richtig, auf einem (und nur eine, soweit ich das beurteilen kann) MacBook Pro-Computer [EDIT: 14.08.2016 und auch auf einem MacMini mit derselben OS X-Version].

Kurze Beschreibung des Problems: Vor ein paar Tagen, als ich glücklich eine große JSF / Primefaces-Webanwendung entwickelte, stellte ich fest, dass nach ein paar Neuladungen komplexer JSF / Primefaces-Seiten das Aktualisieren / Reflektieren von Änderungen, die ich vorgenommen (und gespeichert) hatte, eingestellt wurde Verbundbauteile. Ich fand jedoch, dass, wenn ich einige Minuten warte, ich das Neuladen dann wieder ausführen könnte, ok, für einige Male, die CC-Änderungen widerspiegelnd, bis es wieder "hängen blieb".

s passiert, soweit ich das beurteilen kann, nur auf meiner Hauptentwicklungsmaschin Dies ist ein MacBook Pro 15 "(macbookpro11,3 Mid2014.).

[EDIT: 2016-08-14 Jetzt auch auf einem macmini4.1 Mid2010 reproduziert, auf dem dieselbe OS X-Version und ein (leicht) angepasstes @ ausgeführt werde * kopiert * -Version desselben NetBeans / GlassFish-Setups NB8.1Beta / GF4.1 und mit JSF 2.2.8-17]

Es scheint egal zu sein, ob:

Ich verwende NetBeans-8.1beta / Glassfish4.1 oder NetBeans8.1 / Glassfish4.1.1 [AUSSERDEM: Der Grund, warum ich hauptsächlich NB8.1beta / GF4.1 und nicht NB8.1 / GF4.1.1 verwende, wird erklärt unter:https: //stackoverflow.com/questions/35681181/jsfobjectdb-why-might-deployment-of-a-large-web-app-to-glassfish-4-1-1-take-5]

Ich verwende eine völlig neue NetBeans + Glassfish-Installation oder eine vorhandene.

Ich verwende JDK1.7 (jdk1.7.0_51.jdk) oder JDK1.8 (jdk1.8.0_60.jdk) (auch für NetBeans / Glassfish und / oder zum Kompilieren und Ausführen von Quellcode).

Ich verwende ein Projekt mit Git (das Problem ist zuerst in einem großen Projekt aufgetreten, aber ich habe es seitdem in einem der einfachsten Projekte ohne Git reproduziert, dh es hat nur etwas damit zu tun, was passiert, wenn Facettenänderungen unter / build / web festgestellt werden /)

Ich benutze Primefaces oder nicht (ich kann es in einer sehr einfachen JSF-App erreichen).

Ich verwende ein sauberes GET-Reload oder ein Browser-Kommando-Reload.

Aber soweit ich das beurteilen kann, passiert es NICHT mit einem fast identischen Setup auf einem älteren MacMini (macmini4,1 Mid2010).

[EDIT: 2016-08-14 Ja, es passiert auch auf diesem MacMini, wenn ich JSF-Seiten in der vollständigen, großen Web-App, die ich entwickle, oft genug neu lade, nicht nur in einer Mini-Test-App]

inige andere Dinge, von denen ich glaube, dass ich sie kenne:

Dies ist in allen Fällen bei deaktivierter Funktion "Beim Speichern bereitstellen" der Fall.

Es scheint JSF-Vorlagen oder Includes nicht zu beeinträchtigen, es scheint nur Verbundkomponenten zu beeinträchtigen.

Es ist kein Problem mit der javax.faces.FACELETS_REFRESH_PERIOD (die standardmäßig für Mojarra 2 ist). Wenn ich es auf 0 ändere, verschwindet das Problem (es gibt kein Caching), aber die Lade- / Neuladezeiten für große komplexe JSF-Seiten werden in einigen Fällen schmerzhaft, in Minuten anstatt in Sekunden.

Es hilft nicht, einfach von einer JSF-Seite auf eine andere zu wechseln.

s macht keinen Unterschied, welchen JSF-Bereich ich verwend

Es passiert mit einer Anwendung, die über /build/web.@ bereitgestellt wir

Die Zeitstempel der geänderten XHTML-Dateien für die zusammengesetzten Komponenten ändern sich definitiv, wenn ich sie in NetBeans speichere (sie werden korrekt in /build/web/resources/...)

Ich habe seit vielen Tagen keine Betriebssystem-Software-Updates oder -Installationen durchgeführt.

Ich habe Screencasts (hier nicht verfügbar) des gesamten Problems erstellt, wie unten angegeben.

Erfahrung mit der ursprünglichen sehr großen Web-App

Als ich zum ersten Mal auf das Problem stieß, war es in einer sehr großen Web-App. Ich bemerkte es mit einer winzigen kleinen zusammengesetzten Komponente, die Text mit einer Stilklasse (für ein Symbol) generiert, die CC in einem p: accordionPanel und einem p: tab verwendet wurde. Ich stellte fest, dass nach mehrmaligem erneuten Laden der Änderungen die Änderungen nicht mehr erfasst werden. Es war nur ein Zufall, dass ich herausfand, dass wenn ich viele Minuten, manchmal bis zu 10 Minuten, warte, es die Änderung "fängt".

Ich bin dann ein paar Tage in meinen Commits zurückgegangen, zu einer Zeit, in der ich mich eindeutig ohne Probleme entwickeln konnte und das Problem erneut auftrat! Ich habe dies viele Male getestet, unabhängig davon, um welches Problem es sich handelt, es befindet sich nicht in der Datei .git commit (die / nbproject / private enthält, aber nicht alle Unterordner von /nbproject/private)

Erfahrung mit einer kleineren Primefaces-Test-Web-App

Ich habe es dann mit einer viel kleineren Test-Web-App mit einigen Primefaces-Testseiten versucht. Ich konnte das Problem reproduzieren, wenn ich die index.xhtml-Seite einige Male neu geladen habe, während ich eine winzige zusammengesetzte Komponente mit einer Implementierungszeile geändert habe, die in der index.html-Seite verwendet wurde. Ich stellte dann fest, dass ich ungefähr 10 Sekunden oder manchmal eine ganze Minute warten musste, und dann würde die Änderung wieder "fangen".

Erfahrung mit einer winzigen JSF-Core-Web-App

Mit einer index.xhtml und einer einzelnen zusammengesetzten Komponente mit einem einzelnen h: outputText-Wort könnte das Problem auftreten, wenn ich den CC speichere und dann die index.xhtml sehr schnell neu lade. Ich spreche nicht davon, dass es sich anscheinend nicht ändert (weil man die javax.faces.FACELETS_REFRESH_PERIOD "schlägt"). Ich spreche davon, dass es "blockiert", sodass es die Änderung im CC danach überhaupt nicht mehr erfasst wie oft man die Seite neu lädt, bis der Ghost in der Maschine beschließt, sich selbst zu "entsperren".

Normalerweise würde ich in der Tat ein Beispiel oder "Schritte zum Reproduzieren des Problems" angeben, aber es macht wenig Sinn, dies zu tun.wenn ich das Testprojekt von einem Computer (meinem MacBook Pro) auf einen anderen verschiebe (auf dem MacMini wird dieselbe Betriebssystemversion ausgeführt), verschwindet das Problem. Und ich kann es (auf meinem Hauptentwicklungscomputer MacBook Pro) mit der einfachsten NetBeans JSF-Webanwendung mit einer index.xhtml-Datei erreichen, die einen einzelnen CC enthält.

[EDIT: 2016-08-14 Ich kann es zwar auf diesem MacMini reproduzieren, auf dem die gleiche Betriebssystemversion ausgeführt wird, aber ich konnte es bisher nur mit der sehr großen Web-App reproduzieren, die ich entwickle und die nicht einfach für andere bereitgestellt werden kann zum Testen (und ich müsste zum Beispiel die ObjectDB-Datenbankabhängigkeit entfernen und Dummy-Daten bereitstellen)]

Mir ist klar, dass man normalerweise eine einzelne Frage zum Stackoverflow stellt, aber Antworten auf diese Fragen, die mir weiterhelfen könnten, wären willkommen:

F0: Hat jemand etwas Ähnliches erlebt (auf einem Mac)?

F1: Was kann ich noch versuchen, um es zu diagnostizieren? Ich habe keine Ideen mehr.

F2: Kennt jemand etwas Spezielles für ein MacBook Pro, das sich auf das Abrufen / Erkennen von Änderungen in den Build- / Webordnern auswirken könnte, die dies erklären könnten?

F3: Gibt es irgendetwas, was die Funktionsweise von Facelets und / oder Glassfish mit einer über / build / web bereitgestellten Anwendung erklären könnte?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage