我想用WildFly AS在JSF + Spring Framework中创建Java EE应用程序。其中一个热门要求是: 即插即用模块这意味着如果我更新我的应用程序或将新模块添加到我的应用程序中。 (显然更新bean.xml,web.xml,pojo类,jar等) 然后,不重新部署我的* .war文件,并且重新启动我的Wildfly AS会发生更改。
答案 0 :(得分:3)
由于一些原因,这是一项复杂的要求。您将如何处理数据库架构/实体模型的更改?您将如何处理升级时正在进行的会话并积极使用“旧”代码?如何处理容器托管代码的更改,仅在部署时由容器管理的代码,例如新EJB等?
我在生产中用于实现其中一些要求的一种方法是使用应用程序版本控制和完全架构向后兼容性进行滚动更新。这是在集群环境中完成的,代理服务器可以允许使用旧版本应用程序的活动会话继续完成,并确保新会话转到包含新版本代码的服务器/上下文。因此,您最终仍会部署包含新版本代码的WAR,并最终在所有旧会话结束/过期时取消部署旧版本。要做到这一点,您必须承担代码中的负担,以便在新版本对其进行更改时完全支持对模型的两个同时版本进行操作。这不是一个微不足道的负担。您还必须承担额外基础架构的负担,以适当地路由会话。
我知道像JRebel这样的产品可以让你进行代码的热部署(甚至像EJB这样的东西),其想法是缩短开发/测试周期,但我没有看到它在外部使用发展环境。此外,您仍然需要处理在旧版本/型号上启动的活动会话。