技术开发 频道

浅谈几种Java Web框架对自动重加载的支持


IT168分析评论】 
    当我们在编写软件的过程中,编译,构建,测试的周期的速度直接影响着开发者的生产效率,如果我们必须重新编译,重新构建应用程序,并且重新部署,还有可能重新启动服务器,这将花费很长的时间从而减缓了开发的速度。 

    一些构建应用程序的平台,特别这些使用动态和脚本语言的,他们允许开发者对应用程序做出修改(代码,模板和配置)并且能够立即看到修改后的结果。 

    这些有着不同的叫法,例如有的叫自动重新加载,有的叫热部署,平台对和框架对这些性质支持的程度对开发者开发和维持一个web应用程序的效率有着重要的影响。 

    在Java中自动重新加载 

    大多数Java web框架都支持自动重新加载,通常以页面模板的标准开始,例如,在一个web应用程序中修改JSP文件,应用服务器就能够检测到所做的变化并能重新运行。 

    随着web应用程序不断变得复杂,要求重启服务器的时间也会增加,而自动重新加载可能需要更多的时间并有更多的限制,特别的与Rails上的Ruby相比更是如此。 

    最近几个Java web框架宣布已经增强了对自动重新加载的支持,下面对一些流行的Java web框架进行比较: 

    Grails 

    Grails 支持自动重新加载(auto-reloading)带有一些限制: 
    如果事务属性被设置为false,服务通常仅被重新加载。 
    在运行时,域的类要与数据库重新映射。如果通过'dbCreate'属性的'update'设置,数据源被配置为自动产生数据 
    库 ,那么数据源将尽可能更新数据库。改变域类偶尔的要求应用程序重启。 

    Seam 

    Seam 1.2.1已经引进了热部署的功能,只有支持Seam JavaBean,并不支持实体运行,也不能支持EJB3组件。 

    Spring MVC & Web Flow 
    
    Spring 2.0.4 允许Spring MVC发报机被重新加载,Spring对支持动态语言就允许在 Beanshell和Groovy中写控制器和验证器,可以不用重启应用就可以重新刷新。 


    Spring Web Flow与Spring MVC一起使用,Struts 1和2与JSF能够进行导航和web应用程序的状态管理,可以使流能够被重新构建而不用重启服务器。 

    另外,Spring IDE 2.0支持Spring Web Flow,可以使用Spring IDE 2.0对导航逻辑以图形的方式做出变化,这些变化立刻生效。不用使容器重启。 

    Struts 2 

    Struts 2可以使行为重新加载,当他们改变时。 

    Tapestry 5 

    在一个开发模型中,Tapestry 4支持HTML模板和页面属性的重新加载,Tapestry 5增加了活动类和模板重新加载的支持。 

    像其他框架一行,有一些限制: 
    自动重新加载通常不对JAR文件的资源进行支持。 
    既然重新加载使用类加载,当与没有被加载的类进行通讯时,这就可那导致ClassCastExceptions 异常。 
    如果保持对重新加载类引用,则有可能导致内存泄漏。
0