2011-10-14 14 views
10

Sono abbastanza nuovo in Java EE e ho avuto problemi con la lentezza del processo di distribuzione e mi chiedo se sto facendo qualcosa di sbagliato. Ho esperienza con Django in cui si verificano immediatamente le modifiche al codice, e sembra che l'implementazione di applicazioni Java EE sia un po 'confusa - ci sono più cose che rivendicano l'implementazione a caldo (Glassfish, Eclipse maniaco hotdeploy, Jetty hotdeploy, JRebel ecc.).Ridistribuzione immediata delle applicazioni Java EE

Il mio progetto è un progetto Maven e sto utilizzando Netbeans per la distribuzione. Il sito utilizza i framework Spring, JSF e Hibernate.

In Netbeans, Distribuisci su Salva, in base alla seguente schermata sembra essere abilitato, ma fare clic su/unclicking non è possibile dal momento che afferma di ottenere le informazioni dal mio pom.xml (anche se non esiste un tale campo nel mio pom .xml (solo dipendenze)). enter image description here

Ora, le modifiche a alcuni file sembrano essere immediatamente efficaci. Questi includono: - file JSF - File statici

Modifiche a seguito richiedono distribuzione: - Qualsiasi file XML - qualsiasi file proprietà, anche le proprietà di localizzazione dei file - Qualsiasi file java

Modifiche a quelli che mi richiedono distribuire manualmente e il ridistribuzione richiede mezzo minuto anche se attualmente ho solo 2-3 classi, in pratica una singola classe utente e una classe di autorizzazione. Il progetto consente solo gli accessi al momento, e nonostante ciò, la compilazione dura circa pochi secondi; e il contenitore (Glassfish) sembra consumare circa 600 MB di RAM e dà persino errori PermGen dopo alcune distribuzioni e ho bisogno di uccidere il processo java utilizzando Task Manager. (Ho letto che questo è correlato alla perdita di garbage collector dopo ogni redeploy, e ho anche usato jhat per generare un profilo, ma è stato presentato con un elenco di migliaia di classi, le mie classi, Spring, Hibernate, ecc.)

Ho anche sentito parlare di jrebel e ho provato a eseguirlo, ma sembra che non sia compatibile con la mia versione di Netbeans (7.0) e anche se sembra funzionare, qualsiasi modifica a qualsiasi file java richiede ancora una ridistribuzione.

C'è qualcosa che posso fare per ovviare a questi problemi, o è normale che Java EE aspetti circa 1 minuto dopo ogni modifica a qualsiasi file Java? Questo problema uccide la produttività in modo significativo.

Qui è la mia uscita Glassfish quando si distribuisce l'applicazione: http://pastebin.com/7FhZ6AVh

risposta

5

Sono fonti né credibile né ufficiali reperibili ma dal momento che non si hanno risposte mi piacerebbe far notare due cose che ho scoperto.

Il primo è this FAQ nel sito NetBeans che descrive come attivare la compilazione su Salva per un progetto Maven. Sembra che questa impostazione sia disattivata per impostazione predefinita e attivata solo per impostazione predefinita per i test. Per comodità:

Vai alla finestra di proprietà del progetto, Compile pannello, per accenderlo per l'esecuzione principale fonte pure.

Il secondo è, e devo sottolineare che non lo capisco completamente, sembra che ci siano due modi diversi in cui NetBeans distribuisce un'applicazione Web.La prima è una distribuzione sul posto che sembra essere uguale alla distribuzione manuale di un file .war sul server. Il secondo è una distribuzione incrementale, che se è simile alla compilazione incrementale significa che quando la tua app viene distribuita a caldo, stai solo distribuendo i file modificati.

La distribuzione sul posto sembra essere il metodo di distribuzione predefinito quando si fa clic su Run o Deploy dal menu di scelta rapida dei progetti. La distribuzione incrementale si verifica quando il progetto è già distribuito e si fa nuovamente clic su Run (o si utilizza il pulsante della barra degli strumenti Run).

Vorrei sottolineare che le FAQ di NetBeans, sebbene sul sito Web netbeans.org non siano una pubblicazione ufficiale. Chiunque può creare una FAQ e le informazioni possono diventare obsolete senza revisione.

Edit: Dopo un po 'di riflessione ho deciso che la cosiddetta distribuzione incrementale non è un modo diverso di distribuzione è solo che la seconda volta che Run l'applicazione che fa una distribuzione incrementale.

Edit: Si noti che l'istruzione sopra di voi sta puntando al pannello Compile in contrasto con il pannello Run che avete scelto nel vostro screenshot. Ecco il mio colpo di schermo che mostra che è necessario scegliere for both application and test execution nella goccia Compile pannello verso il basso e che il valore predefinito è for test execution only

0

"Compila il Salva" rallentato le cose molto per me, ma un'altra cosa ho trovato in seguito è il pulsante "Applica modifiche al codice" in Netbeans, che è visibile solo in modalità Debug. (Il pulsante verde a destra nella foto)

Questo è utile per applicare le modifiche al codice Java; non funziona ogni volta, ma penso che funzioni la maggior parte delle volte se la modifica non è un'aggiunta al metodo e il bean è ambito scope. Penso che questo faccia Compile on Save manualmente, ma è meglio che ridistribuire.

Apply Code Changes

+0

"Applica modifiche al codice" è hotswap. Non funzionerà se stai cambiando una firma di classe. – Daniel

2

JRebel è compatibile con NetBeans 7.0 (http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin) ed in effetti è compatibile con qualsiasi IDE là fuori.

1

Questo è un grande video Geertjan Wielenga dal team NetBeans che cammina attraverso la creazione di JRebel su NetBeans 7.2.1 e 3.1.2 GlassFish:

Come iniziare con JRebel in NetBeans IDE: http://www.youtube.com/watch?v=kveXKv2q4Ec