2010-11-11 3 views
6

Ho una piccola applicazione Web configurata con Guice, Jersey e EclipseLink ed eseguire questa applicazione su jetty (8.0.0.M1) durante lo sviluppo. Esistono circa 10 (piccole) classi gestite dall'APP (entità e oggetti d'immersione) e circa 20 classi totali.Accelerare l'avvio dell'applicazione su Jetty

L'avvio iniziale richiede 15 secondi + 5 secondi per le prime richieste. Sembra che JPA stia lavorando alla prima richiesta, dal momento che ho la strategia di generazione tabella "crea" abilitata e vedo alcuni output JPA di Maven alla prima richiesta.

Un ricaricamento richiede circa 10 secondi e la prima richiesta dopo il ricaricamento dura da 3 a 4 secondi.

Si può pensare, che il tempo di avvio non sia così male, ma mi chiedo se potrei accelerare l'avvio per lavorare in modo più fluido come con Django. Qualche idea per la messa a punto di avvio?

+0

La tua preoccupazione è il tempo di avvio in sé o il primo utente deve pagare il costo di avvio? Se è quest'ultimo, è possibile che l'applicazione invii richieste a se stesso all'avvio per riscaldarlo. Quindi il primo utente vede un tempo di risposta normale. –

+0

La mia preoccupazione è il tempo di avvio durante lo sviluppo. I riavvii sono relativamente rari in produzione, quindi accetto che il primo utente debba attendere qualche secondo. – deamon

+1

Se si riavvia a causa di modifiche al codice (non modifiche allo schema), provare a evitare di riavviarlo (quasi) completamente con JRebel (http://www.zeroturnaround.com/jrebel/). Non è gratuito, ma consente di risparmiare un sacco di tempo (non sono affatto affiliato con loro). – DaGGeRRz

risposta

2

Ho paura che se non si è pronti a rimuovere la strategia di creazione tabella, sarà necessario tollerare tali tempi di caricamento. In sostanza, ogni volta che si avvia l'applicazione, si eliminerà/creerà/verificherà le tabelle ed emetterà le istruzioni DDL corrette per farlo corrispondere alle entità nel pacchetto.

Supponendo di aver completato la definizione delle entità e si sta lavorando su un codice di business logic, è possibile creare il database una sola volta e riutilizzare la configurazione iniziale.

0

Immagino che tu stia utilizzando Jetty per lo sviluppo rapido di applicazioni (RAD) e desideri vedere e testare tutte le modifiche il più rapidamente possibile. Se non esiste un requisito "persistente" effettivo nel database dell'ambiente RAD, è possibile provare a passare a un motore DB im-memory. I motori DB come HSQL consentono di avviare nuove tabelle (e altre strutture) molto rapidamente rispetto ai motori DB di qualità di produzione effettiva. Ciò richiederebbe l'utilizzo di un ORM poiché l'SQL di HSQL è molto diverso dalla maggior parte degli altri database ma sembra che tu stia già utilizzando JPA, quindi questo non dovrebbe essere difficile.

L'unica alternativa che vedo è utilizzare un database che ha lo schema già creato in modo appropriato e non lo rilascia ogni volta.

+0

Sto già utilizzando un DB in memoria (Derby). – deamon