2010-05-03 74 views
9

当我使用嵌入式jetty服务器(tomcat for grails 1.2)运行我的grails应用程序时,我可以在运行时在运行时更改我的控制器,服务和其他java文件,而无需重新启动应用程序。我如何才能在部署在Tomcat(或任何服务器)上的应用程序上实现同样的功能。我观察到webapps下的爆炸war文件夹有gsp文件,但不是groovy文件。在grails应用程序运行时修改groovy代码

回答

9

完成Eric的回答,您无法在生产环境中动态更改源代码。但是,如果你真的想修改代码,住,您可以:

  1. 更改Groovy类,编译它,更换后的.class文件中的分解战争文件夹,重新启动Tomcat(我知道,我知道,这是痛苦但我不知道更好的办法)
  2. 对于gsp文件,有一个技巧。添加到您的Config.groovy文件以下属性:grails.gsp.enable.reload=true。这将允许您在飞行中更改您的gsp文件。小心,因为它会损害性能。有关详细信息,请参见here
3

将应用程序打包为WAR时,Groovy文件被编译为Java字节码(.class文件)并包含在WAR中。由于内存泄漏,在运行时热交换文件不适合生产使用。

1

是Spring/Grails特有的permgen问题,还是在精简的Tomcat/Groovlet设置中同样适用?

从性能角度看,编译的Groovy文件与非编译的正确性没有任何好处?编译步骤仅仅是为了让Java和Groovy一起工作?

我希望在不太遥远的将来,我们将拥有一个完全可重新加载的生产环境,它性能良好,没有内存泄漏。

看起来很愚蠢,Grails & Rails都没有提供可行的生产重载选项(在Grails中,要求早日或晚些时候的permgen死亡)。 PHP看起来很慢,而且数以百万计的Apache/PHP驱动的站点可以快速地向用户提供内容。如果我们没有运行Facebook,我们是否应该关注我们在* Rails阵营中提醒的性能处罚?

从外部看,正在进行的Java permgen问题看起来很荒谬,它不能解决吗?