Kısaca: Hatta karıştırabilirsiniz ( @Singleton
ve @ApplicationScoped
) ve bazı senaryolarda mantıklıdır.
(ve benimkinde beklendiği gibi çalışıyor!)
Şimdiye kadarki diğer cevaplara ek olarak, gerçek dünya senaryolarına açıklık getirmek için birkaç nokta daha eklemek istiyorum.
Benim için bu soru , uygulama kapsamlı bir bean'ı uygulama başlangıcında başlatmaya nasıl zorlayabilirim?
Orada bazı tartışmalarda bunu söyledim ve şu ana kadar buna karşı geçerli bir argüman bulamadım:
Pek çok gerçek hayat senaryosunda / kurulumunda - soyut / modelleme açısından - bir şeyin bir EJB mi yoksa uygulama kapsamlı bir yönetilen fasulye mi olduğunu (ya da böyle olacağını / muamele göreceğini) kesin olarak söylemenin zor olduğunu söyleyebilirim.
Şimdiye kadar buna karşı (tartışmalı ama kesin olmayan) argümanlar (benim açımdan): (@BalusC ve diğerleri: Bunların kesin olduklarını görmek isterim, ancak değilse, yukarıdakiler doğru olabilir ve yine de argümanlar Yine de okuyucunun farklılıkları / avantajları / dezavantajları / kötü / iyi uygulamaları anlamasına yardımcı olur)
EJB ve Yönetilen Bean
BalusC : Bu, yönetilen bir fasulye değil, EJB, oldukça farklı. EJB'ler arka uçta çalışır ve ön uçta çekirdekler yönetilir. EJB'ler de işlem bağlamında çalışır. [...] İşletme fasulyelerini yönetilen fasulyelerle karıştırdınız ve ben sadece buna işaret ettim.
fakat:
ben : Sanırım tam olarak doğru değilsin ve anlamı / kullanımı abartıyorsun ve bu bana tartışmalı görünüyor. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Kurumsal JavaBeans (EJB), kurumsal yazılımın modüler yapısı için yönetilen bir sunucu yazılımı ve çeşitli Java API'lerinden biridir. EJB, bir uygulamanın iş mantığını kapsayan bir sunucu tarafı yazılım bileşenidir.
Kuru Fasulye Türleri
"Durum Bilgili", "Vatansız" veya "Tekli" olabilen Oturum Fasulye [3] [...]
Mesaj Tahrikli Fasulye [...]
... benim durumumda hala geçerli olan.
Singleton EJB ile Uygulama Kapsamlı Fasulye
Kilitleme
BalusC : Bir singleton EJB, uygulama kapsamlı bir fasulye ile aynı değildir. Bir singleton EJB okuma / yazma kilitlidir ve bu nedenle aklınızdaki görev için potansiyel olarak verimsiz / aşırı uyumludur. Uzun lafın kısası: İyi bir Java EE kitabı alın ve iş için doğru aracı kullanmayı öğrenin. Bir yol kesinlikle diğer yol değil. Çalışması, doğru araç olduğu anlamına gelmez. Bir balyoz bir vidayı sıkabilir, ancak bunun için mutlaka doğru alet değildir :)
fakat:
(Balyozu burada göremiyorum - üzgünüm ...) Kilitleme varsayılanlarını bilmek güzel (bunun farkında değildim), ancak bu yine yanlış görünüyor: Oracle Java EE 6 Tutorial on Managing Concurrent Access in a Singleton Session Bean
Bir singleton oturum çekirdeği oluştururken, singleton'un iş yöntemlerine eşzamanlı erişim iki şekilde kontrol edilebilir: konteyner tarafından yönetilen eşzamanlılık ve fasulye tarafından yönetilen eşzamanlılık. [...]
Varsayılan olarak, singletonlar konteyner tarafından yönetilen eşzamanlılığı kullansalar da, @ConcurrencyManagement (CONTAINER) ek açıklaması, eşzamanlılık yönetim türünü açıkça ayarlamak için singleton sınıf düzeyinde eklenebilir
@ApplicationScoped
ve arasındaki pratik farklılıklar hakkında bazı açıklamalar var@Singleton
.