我听说这是JavaRebel所做的,但是有没有其他好方法可以部署新版本的EAR,同时允许用户在以前的版本中保持活动?我们使用JBoss作为应用程序服务器...热部署Java EAR以最小化或消除服务器上应用程序的停机时间?
回答
这不是JavaRebel所做的。 JavaRebel(根据描述)热替换内存中的类。在现有系统连接的情况下,这是不可接受的,因为更新后的类可能会破坏客户端的逻辑。
一旦一家公司,我工作也有类似的问题,它解决了这种方式:
- 智能路由器用作负载平衡器
- 新版本部署到50% (新)簇的节点
- 新的连接被严格地传送到这些更新的节点,旧节点在旧节点之间被平衡
- 旧节点被脱机(一个接一个地保持数目客户端节点内的每个节点)
- 同时,新版本部署到离线“老”的节点,他们被带到了新的节点
- 由于EJB集群,会议和豆类被其他老节点
- 最终回升(在几个小时内),只有一个旧节点左,具有旧版本,并使用旧版本的所有客户端的情况下被连接到它
- 当最后一个旧的客户端断开了,这点太放倒
现在,我不是一个网络人,也不能给你很多细节(比如路由器硬件是什么等)。我的理解很简单,除非如果我没有记错,我们必须设置一个额外的Weblogic域来部署新版本的应用程序(否则它将与JNDI名称上的旧版本冲突)。
希望有所帮助。
P.S. Ichorus提供了一条评论,称应用程序部署在客户端的服务器上。所以路由器技巧可能不可行。现在,我只看到一个可行的解决方案(现在是21:52,我可能忽略了:)) -
- 开发带有“版本化”JNDI名称的新版本;例如如果Customer bean在版本1中处于ejb/Customer之下,则在版本2中它将位于ejb/Customer2下
- 在应用程序中具有稳定的基本接口(工厂风格)的业务外观,当询问Customer bean时,试图找到最高版本的JNDI名称(不是在每次调用时,当然可以缓存一个小时左右)。该外观可以(也应该)作为单独的应用程序进行部署 - 而且从未或很少更新
- 现在,每个新客户端都可以访问部署的最新应用程序,并且应用程序不会发生冲突。
这种方法需要仔细的规划和测试,但应该工作恕我直言。
我最近修改了几个应用程序,让它们在同一个域中共存(在它们为不同的数据源使用相同的JNDI名称之前)。
我想你可能想用OSGI框架来研究Spring。 http://www.springframework.org/osgi
据我所知,WebLogic具有一项称为并行部署的功能,可消除EAR版本升级期间的停机时间。您可以在不停止现有应用程序的情况下部署新版本,一旦新版本成功部署,您就可以从旧版本透明地切换到新版本。
我不确定其他应用程序服务器是否支持此操作。
编号:http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490
弗拉基米尔周围使用负载平衡器的建议是实现你想要的东西的一个相当肯定的方式。请记住,它不一定是高端硬件负载平衡器。相反,如果您使用本机Web服务器(Apache或IIS)以及mod_jk或mod_proxy提交您的JBoss服务器,则可以维护一个常见的Web Facade并在EAR升级时实施适用的加载和路由例程。
//尼古拉斯
- 1. Java Ear应用程序 - 热部署
- 2. 针对Java应用程序的零停机时间部署
- 3. 如何部署ASP.NET应用程序以零停机时间
- 4. Java - 热部署
- 5. 在WebLogic服务器上部署Java Web应用程序
- 6. 在服务器集群上部署Java应用程序的最佳方法?
- 7. 我可以在JBoss应用程序服务器上部署Java应用程序和php应用程序吗?
- 8. 在Tomcat服务器上部署JSF应用程序时出错
- 9. 在Heroku上无需停机热部署
- 10. tcServer上的零停机时间部署?
- 11. Java部署服务器程序
- 12. 什么是Grails应用程序部署的最佳应用程序服务器?
- 13. 在服务器上部署此Java应用程序时该如何更改?
- 14. 部署不是.wars的Java服务器应用程序
- 15. 如何在websphere应用程序服务器中部署ear文件
- 16. Maven将EAR作为分解存档部署到应用程序服务器
- 17. 在远程服务器上部署,启动和停止Scala应用程序
- 18. 使用Maven在远程服务器上部署Java应用程序
- 19. 将BPS部署到Tomcat或其他应用程序服务器
- 20. Capistrano:部署在Ubuntu服务器上的Laravel应用程序
- 21. 与服务器上的数据库部署vb.net应用程序
- 22. 部署在应用程序服务器上的WSO2 ESB WebLogic
- 23. 在Tomcat服务器上部署我的GWT应用程序
- 24. 如何在Azure应用程序服务上部署Windows服务
- 25. 如何在Weblogic应用程序服务器上部署SpringBoot应用程序?
- 26. 无法在JBOSS服务器上部署基于maven的java web应用程序
- 27. 在一个活着的服务器上部署一个java EE应用程序
- 28. 在IIS服务器2008上部署应用程序
- 29. 在Cloud Foundry服务器上部署应用程序
- 30. 在tomcat服务器上应用程序部署失败
这是有帮助的,一个非常简单和合理的解决方案。不幸的是,我们的许多客户端没有负载均衡器,我们的会话状态保存的方式只有一点点,并且只保存在本地应用服务器的缓存中(我一直主张对其进行更改)。感谢您的输入。 – Ichorus 2008-10-21 20:04:01
哦,所以你正在客户端的服务器上部署你的应用程序?当然,这变化很大。除非在JNDI名称中实现某种版本控制,否则不可能,我会说... – 2008-10-22 01:50:44