2015-03-19 62 views
3

是否有任何Java EE標準(應用程序服務器交叉兼容)方式如何在初始化過程中停止Java EE應用程序,即運行@PostConstruct @Singleton @Startup類的已賦值方法?在初始化期間以編程方式停止Java EE應用程序

@Singleton 
@Startup 
public class Initializer { 

    @PostConstruct 
    public void checkConfiguration() { 
     // stop application here 
    } 
} 

我要尋找的軟辦法阻止只是應用到整個應用程序服務器,完全不像System#exit

+0

爲什麼不從'checkConfiguration'中拋出[IllegalArgumentException](http://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html)?這應該會阻止你的部署進入它的軌道。 – 2015-03-19 12:11:57

+0

是的,它的工作原理。實際上任何'RuntimeException'都可以工作。你想發佈它作爲一個普通的答案,所以我可以接受它嗎? – czerny 2015-03-23 22:49:58

回答

5

如果您在@Startup帶註釋的@Singleton中從@PostConstruct註釋的方法拋出任何種類的RuntimeException(例如配置錯誤的IllegalArgumentException),那麼整個應用程序將無法部署。

從§4.8.1「辛格爾頓會話Bean初始化」的EJB 3.2規範的:

如果啓動註釋出現在單會話bean類,或者如果單會話bean已經通過部署指定描述符需要預先初始化,容器必須在應用程序啓動序列期間初始化單例會話bean實例。容器必須在任何外部客戶端請求(即,源自應用程序之外的客戶端請求)傳遞到應用程序中的任何企業bean組件之前,初始化所有此類啓動時單例會話Bean。

如果初始化失敗,就不能滿足這個要求。

相關問題