2015-12-01 38 views
3

我一直在尋找一種以編程方式讓部署自行停止的方法。讓耳朵部署以編程方式將自己標記爲失敗

對於我們的用例,我們部署幾個耳朵,其中一個是最重要的耳朵,其他耳朵依賴於它。我們確信重要的耳朵首先部署,其他人開始並行部署。

我們面臨的問題是重要的耳朵可以在升級模式,這是有效的。

在開始之後,我們檢查runmode,當它不正常時,我們拋出一個RuntimeException。檢查每個耳朵的部署,發生在Singleton啓動EJB3 Bean中。但是當這些拋出RuntimeException時,部署仍然是活動的。我想通知容器,部署應該標記爲失敗。是這樣的可能嗎?

我們使用的技術有:Wildfly 10,Java-ee 7,EJB3。

我在使用命令行CLI停止部署的stackoverflow上找到了一個解決方案。 Can a deployment stop itself?在我看來,它應該有可能在源代碼本身做到這一點。

有什麼想法?

+0

不知道部署選項,但簡單地提供REST服務在部署工作時返回「OK」,否則失敗會更容易? –

+0

我有點用我描述的單例解決方案。 ear2單身啓動bean調用ear1(重要)項目,並在runmode不正確時引發RuntimeException,但這不會將部署標記爲失敗。由於該項目未被部署,所以其他bean(例如計劃的)被允許執行任務。我想找到一個解決方案,在啓動過程中檢查runmode,如果不正確,則失敗。 – Wouter

+0

隊長顯然:使用runtime.exec()來調用shell命令? (不是那麼明顯,有一些用戶文件系統權利問題附加到這個問題) – Gimby

回答

0

對我來說,部署無法自行停止聽起來很合理。如果可以,應用程序應該在哪裏報告它已成功解除部署?對於不存在的應用程序?使用CLI的選項在我看來就像您擁有的最佳解決方法。

在旁註:爲什麼使用多個EAR? EAR可以包含多個WAR和EJB,因此不需要擁有多個EAR。而且,幾乎所有的項目都可以通過一個簡單的WAR來完成,我多年來一直沒有使用過EAR。

+0

那些耳朵是「重要」耳朵的「客戶」,是幾個戰爭和ejb模塊的組合。我同意應用程序解除其自身很奇怪。但我也認爲應用程序應該能夠在啓動過程中退出,即如果它的前提條件沒有得到滿足。 – Wouter

+0

它可以在啓動過程中退出。但是,您正在執行一個Singleton bean,因此它不在啓動期間。 –

+0

我明白,一個ejb3單例啓動bean與「在啓動過程中運行」不一樣。然而,它是我期待實現這種檢查的第一個地方,因爲它在容器部署應用程序時運行。如果ejb系統不是執行「預處理檢查邏輯」的地方,那會是什麼? – Wouter