Quando eseguo l'applicazione Grails utilizzando il server jetty incorporato (tomcat for grails 1.2), posso apportare modifiche ai miei controller, servizi e altri file java al volo in fase di runtime senza riavviare l'applicazione. Come posso ottenere la stessa funzionalità sulla mia applicazione distribuita su Tomcat (o su qualsiasi server). Ho osservato la cartella war esplosa sotto webapps ha i file gsp ma non i file groovy.Modifica codice groovy in fase di esecuzione nell'applicazione Grails
risposta
Completando la risposta di Eric, non è possibile modificare al volo il codice sorgente nell'ambiente di produzione. Tuttavia, se si vuole veramente modificare il codice in Live è possibile:
- cambiare la classe Groovy, compilarlo, sostituire il file .class nella cartella guerra esplosa e riavviare Tomcat (lo so, lo so, è doloroso ma non conosco un modo migliore)
- Per i file gsp, c'è un trucco. aggiungi al tuo Config.groovy il file seguente:
grails.gsp.enable.reload=true
. Questo ti permetterà di cambiare al volo il tuo file gsp. Fai attenzione perché danneggerà le prestazioni. Vedere here per i dettagli
Quando si impacchetta l'applicazione come WAR, i file di Groovy vengono compilati in codice bytecode Java (file .class) e inclusi in WAR. Lo scambio a caldo dei file in fase di runtime non è adatto per l'uso di produzione a causa di perdite di memoria.
Il problema di permgen è specifico per Spring/Grails o lo stesso vale per un setup Tomcat/Groovlet ridotto?
Per quanto riguarda le prestazioni, non vi è alcun vantaggio per il file Groovy compilato rispetto a quello non compilato, corretto? La compilazione è sufficiente per far lavorare Java e Groovy?
Spero che in un futuro non troppo lontano avremo un ambiente di produzione completamente ricaricabile che funziona bene ed è privo di perdite di memoria.
Sembra stupido che Grails & Rails non offrano un'opzione di ricarica di produzione valida (in Grails, chiedendo una prima o dopo la morte del permesso). PHP è apparentemente un cane lento, eppure milioni di siti basati su Apache/PHP offrono contenuti agli utenti in un attimo. Se non stiamo correndo su Facebook, dovremmo preoccuparci delle penalità per le prestazioni di cui siamo avvisati nei campi di * Rails?
Dall'aspetto esterno, il problema del permgen Java in corso sembra assurdo, è irrisolvibile?
- 1. Modifica implementazione/classe in fase di esecuzione
- 2. Compilazione classe Groovy in fase di esecuzione in Java
- 3. Modifica proprietà log4j in fase di esecuzione
- 4. Modifica oggetto iniettato in fase di esecuzione
- 5. formattatore di codice per Grails e Groovy?
- 6. Esecuzione di script groovy in codice Java
- 7. JSON in Groovy/Grails
- 8. Modifica degli stili in fase di esecuzione in WPF
- 9. Esecuzione del codice java compilato in fase di esecuzione
- 10. Modifica del valore di una macro in fase di esecuzione
- 11. Modifica indirizzo endpoint WebService in fase di esecuzione
- 12. Modifica parametro attributo personalizzato in fase di esecuzione
- 13. Modifica SpriteNode PhysicsBody Size in fase di esecuzione
- 14. Come modificare il codice javascript in fase di esecuzione?
- 15. WPF - modifica dimensione carattere globale in fase di esecuzione
- 16. Modifica della lingua per NSLocalizedString() in fase di esecuzione
- 17. C# Crea e modifica classe in fase di esecuzione
- 18. Modifica del colore delle righe JList in fase di esecuzione
- 19. Modifica dei collegamenti Guice in fase di esecuzione
- 20. Errore Groovy in fase di elaborazione
- 21. Variazione Casella colorAccent in fase di esecuzione di codice
- 22. Grails non in esecuzione
- 23. Compilare ed eseguire il codice Scala in fase di esecuzione
- 24. Modifica codice sorgente in fase di compilazione con Roslyn
- 25. Grails: Corsi Servizi VS Groovy
- 26. Plugin Groovy/Grails per Sonar
- 27. Grails/Groovy - utilizzando più @TestMixin
- 28. Groovy and grails jdk issue
- 29. Esperienze che utilizzano Groovy ++ in Grails
- 30. Bug in Mockito con Grails/Groovy