我聽說這是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. 在tomcat服務器上部署java web應用程序
- 6. 在服務器上部署java EE應用程序
- 7. 在WebLogic服務器上部署Java Web應用程序
- 8. 在服務器集羣上部署Java應用程序的最佳方法?
- 9. WSO2應用服務器 - REST服務,部署爲應用程序或服務?
- 10. 我可以在JBoss應用程序服務器上部署Java應用程序和php應用程序嗎?
- 11. Azure Cloud Service主機內部部署應用程序服務器
- 12. 在服務器上部署VS 2015應用程序時出錯
- 13. 在Tomcat服務器上部署JSF應用程序時出錯
- 14. 在Heroku上無需停機熱部署
- 15. Java部署服務器程序
- 16. 的Java EE定時服務,編程定時器和應用程序部署
- 17. 刪除/取消部署在SOA服務器上部署的選定soa組合應用程序
- 18. tcServer上的零停機時間部署?
- 19. 什麼是Grails應用程序部署的最佳應用程序服務器?
- 20. 使用git在遠程服務器上部署應用程序
- 21. 使用Netbeans在遠程服務器上進行熱部署
- 22. 部署不是.wars的Java服務器應用程序
- 23. 在服務器上部署此Java應用程序時該如何更改?
- 24. 如何在websphere應用程序服務器中部署ear文件
- 25. Maven將EAR作爲分解存檔部署到應用程序服務器
- 26. 在遠程服務器上部署,啓動和停止Scala應用程序
- 27. 使用在應用程序解除部署時運行的Java創建服務?
- 28. 將應用程序服務器部署到服務器
- 29. 在紅帽子上的tomcat服務器上部署java應用程序?
- 30. 部署node.js服務器應用程序(最佳實踐)
這是有幫助的,一個非常簡單和合理的解決方案。不幸的是,我們的許多客戶端沒有負載均衡器,我們的會話狀態保存的方式只有一點點,並且只保存在本地應用服務器的緩存中(我一直主張對其進行更改)。感謝您的輸入。 – Ichorus 2008-10-21 20:04:01
哦,所以你正在客戶端的服務器上部署你的應用程序?當然,這變化很大。除非在JNDI名稱中實現某種版本控制,否則不可能,我會說... – 2008-10-22 01:50:44