2012-05-31 69 views
1

我們需要做一些初始化的部署(在一個JBoss 7.1.0實例)的結束,因爲只有這樣,所有需要的服務是可用的(有一個應用程序其中不少是)。在JBoss的7部署結束時執行操作

一種方法,我們嘗試是這樣的:

我們有一個@Startup註釋沿着單獨服務,但我們至今沒有成功地告訴了JBoss最後創建實例沒有太多的麻煩。

我們可以使用@DependsOn,但是我們必須維護一個不斷增長和已經很大的依賴關係列表,因此我們寧願只做最後的手段。

在過去(JBoss 4和5),有可能定義一個依賴於應用程序(如@Depends("myapp.ear")),這正是我們所需要的。

截至7 JBoss的事情發生了變化,但我認爲還是有辦法做到這一點。

另一種方法是嘗試創建我們自己的JBoss子系統,在所有其他子系統啓動後調用它,但是在執行我們需要的操作之前,我們無法找到等待其他子系統完成的方法。

我們可以看看有什麼其他的選擇到?

回答

1

你可以有一個servlet例如BootstrapServlet.java,在WEB-INF/web.xml中使用load-on-startup> 1/load-on-startup>進行定義,並在該servlet中進行初始化。

+0

謝謝你的提示。但是,我們的EAR中通常會有多個WAR,並且必須定義它們的啓動順序(這應該是可能的) - 在某些情況下,我們甚至可能沒有WAR,因此也沒有web.xml。 – Thomas

+0

要考慮的其他事情可能是,檢查服務是否在循環中可用。或者執行基於初始化的時間,以便啓動類或servlet在開始初始化之前等待x minuts ..通常部署速度很快,因此可能只是1 minut .. 最後認爲可能是有服務註冊themselfs時準備(如果這是可能的服務),所以你可以在一個循環中檢查時,所有的服務都是現成 –

1

你可以把與@Startup註釋的類到不同的EAR,或者更好的WAR。我認爲WAR將在任何EAR之後默認部署,而無需配置任何東西。

在啓動類,你可以調用實際的初始化,這是與myapp.ear您的應用程序的其他部分一起部署。調用通過EJB本地或遠程接口完成。

+0

這可能是一種選擇,但通常我'想不必創建另一個應用程序來初始化第一個應用程序。但是,感謝提示。 – Thomas