2012-04-24 16 views
6

Sto utilizzando dcevm + run-jetty-run + livereload, provare a sviluppare un'app Web senza riavviare il molo quando si modificano le origini Java.Come consentire a jetty di bloccare la richiesta quando si ricaricano le classi modificate?

Tutto funziona correttamente. Quando ho modificato una classe java, livereload ha monitorato la modifica e ha attivato il browser aggiornando le pagine aperte per vedere il risultato modificato.

Ma non ho trovato ancora conveniente: quando il browser si ricarica, dcevm e jetty potrebbero non aver ancora ricaricato le classi modificate. Devo aggiornare di nuovo la pagina manualmente, ma non sono sicuro che questa volta mostri il risultato modificato, senza controllare attentamente il contenuto.

Quindi mi chiedo se ci sia un modo per lasciare che il molo blocchi la richiesta quando ho modificato alcune classi e dcevm si sta ricaricando. Si accerterà che le pagine visualizzate siano sempre modificate.

risposta

1

Forse è troppo hacky per il tuo palato, ma potresti inserire uno snippet di inizializzazione statico nei tuoi sorgenti Java per aggiornare un file noto, separato dopo il ricaricamento. Than livereload può guardare quel file separato invece di lasciarlo funzionare direttamente sulle fonti .java.

Qualcosa sulla falsariga di:

public class ReloadUtils { 
    public static void notifyUpdate(String className) { 
    String baseDir = System.getProperty("DEV_MODE_BASEDIR") + "/"; 
    File file = new File(baseDir + className + ".updated"); 
    FileWriter fw = new FileWriter(file.getAbsoluteFile(), false); // overwrite instead of append 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(Long.toString(System.currentTimeMillis())); 
    bw.close(); 
    } 
} 

public class Reloadable { 

    private final static boolean DEV_MODE = System.getProperty("DEV_MODE").equals("true"); 

    static { 
    // static finals trigger most compilers to remove the statements in this case 
    if (DEV_MODE) { 
     ReloadUtils.notifyUpdate(Reloadable.class.getName()); 
    } 
    } 

    /* lots of useful stuff */ 
}