2010-03-08 17 views
6

Uygulamam, gelen iletileri işlemek için bir Bahar DefaultMessageListenerContainer kullanıyor. Uygulamanın ana yöntemi, zaten bir kapatma kancasını kaydeder.Yay kapanmasını bir fasülyeden zorlamak için en iyi yol?

Soru şudur: uygulama içeriğini kapatmaya zorlamanın en iyi yolu nedir?

Mesaj dinleyicisine bir RuntimeException atarsam, kapsayıcı tarafından işlenir ve iletilmez. System.exit çağrısı kabul edilebilir mi? ApplicationContext'u kapatması gereken her sınıfa geçebilir miyim? Bu yüzden close() numaralı telefonu arayabilir miyim?

+1

: Eğer ApplicationContext ulaşmaya istiyorsanız

, Fasulye uygulama bağlamını Başka bir seçenek enjekte etmektir ApplicationContextAware

uygulamak (veya @Autowired ile autowire) olabilir uygulama bağlamında? – Bozho

+0

İleti dinleyicisi, bunun gerekip gerekmediğine karar verebilir; ya da uygulamanın kapatılmasını isteyen bir yönetim mesajı aldığından ya da anormal bir durum meydana geldiğinden dolayı. Bunlardan birçoğu var, bunlardan biri çok fazla deneme alıyor (bu yüksek hacimli bir sistemdir) – xcut

cevap

13

Uygulama içeriğinizi ConfigurableApplicationContext'a gönderebilir ve üzerinde close() numaralı telefonu arayabilirsiniz. En azından, içerik web sunucu ortamında kapatıldığında, sunucu içeriği yok olduğunda bu durum gerçekleşir. Eğer kapamak gerekiyor neden

@Inject 
private ApplicationContext ctx; 
+0

Kapatma işlemini yapması gereken fasulye içeriği nasıl alır? Her şeyden sonra bir POJO .. – xcut

+0

@xcut, uygulamanıza göre değişir. Bir web uygulaması mı, bir masaüstü uygulaması mı? – Bozho

+0

Ne de - bir mesaj kuyruklama/yönlendirme sistemi. Öyleyse tek yolu bağlamı fasülyeye geçirmek veya başka bir yaşam döngüsü arayüzünü uygulamak mı? – xcut

İlgili konular