singkatnya: Anda bahkan dapat mencampurnya ( @Singleton
dan @ApplicationScoped
) dan itu masuk akal dalam beberapa skenario.
(dan bekerja seperti yang diharapkan di milik saya!)
Selain jawaban lain sejauh ini, saya ingin menambahkan beberapa poin lagi untuk klarifikasi dalam skenario dunia nyata.
Bagi saya, pertanyaan ini dikembangkan dari Bagaimana cara memaksa kacang bercakupan aplikasi untuk dipakai saat startup aplikasi?
Dalam beberapa diskusi di sana saya menyatakan ini dan sejauh ini tidak dapat menemukan argumen yang valid untuk menentangnya:
Dalam banyak skenario / pengaturan kehidupan nyata, saya akan mengatakan sulit untuk mengatakan dengan pasti - dari sudut pandang abstrak / pemodelan - apakah sesuatu itu (atau akan menjadi / diperlakukan seperti) EJB atau kacang yang dikelola dengan cakupan aplikasi.
Argumen (bisa diperdebatkan tetapi tidak konklusif) (dari sudut pandang saya) yang menentangnya sejauh ini: (@BalusC dan lainnya: Saya ingin melihat mereka menjadi konklusif, tetapi jika tidak, hal di atas mungkin benar dan meskipun demikian argumennya mungkin tetap membantu pembaca untuk mendapatkan perbedaan / kelebihan / kekurangan / buruk / praktik yang baik)
EJB vs. Kacang Terkelola
BalusC : Itu adalah EJB bukan kacang yang dikelola, yang sangat berbeda. EJB berjalan di backend dan mengatur kacang di frontend. EJB juga berjalan dalam konteks transaksional. [...] Anda hanya bingung kacang perusahaan dengan kacang terkelola dan saya baru saja menunjukkannya.
tapi:
saya : Saya pikir Anda kurang tepat dan melebih-lebihkan arti / penggunaan dan itu terlihat bisa diperdebatkan bagi saya. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Enterprise JavaBeans (EJB) adalah perangkat lunak server terkelola untuk konstruksi modular perangkat lunak perusahaan, dan salah satu dari beberapa API Java. EJB adalah komponen perangkat lunak sisi server yang merangkum logika bisnis aplikasi.
Jenis Kacang Perusahaan
Kacang Sesi [3] yang dapat berupa "Stateful", "Stateless" atau "Singleton" [...]
Kacang Berbasis Pesan [...]
... yang masih berlaku dalam kasus saya.
Singleton EJB vs. Application Scoped Bean
Mengunci
BalusC : EJB tunggal tidak sama dengan kacang cakupan aplikasi. Sebuah EJB tunggal dibaca / tulis terkunci dan dengan demikian berpotensi tidak efisien / terlalu berbelit-belit untuk tugas yang ada dalam pikiran Anda. Singkat cerita: Dapatkan buku Java EE yang bagus dan pelajari cara menggunakan alat yang tepat untuk pekerjaan itu. Satu cara pasti bukan sebaliknya. Berhasil tidak berarti itu alat yang tepat. Palu godam mampu mengencangkan sekrup, tetapi itu belum tentu alat yang tepat untuk itu :)
tapi:
(Saya tidak bisa melihat palu godam di sini - maaf ...) Ada baiknya mengetahui default penguncian (saya tidak menyadarinya), tetapi ini tampaknya salah lagi: Tutorial Oracle Java EE 6 tentang Mengelola Akses Bersamaan di a Singleton Session Bean
Saat membuat kacang sesi tunggal, akses bersamaan ke metode bisnis tunggal dapat dikontrol dengan dua cara: konkurensi yang dikelola kontainer dan konkurensi yang dikelola kacang. [...]
Meskipun secara default, lajang menggunakan konkurensi yang dikelola kontainer, anotasi @ConcurrencyManagement (PENAMPUNG) dapat ditambahkan pada tingkat kelas tunggal untuk secara eksplisit menyetel jenis manajemen konkurensi
@ApplicationScoped
dan@Singleton
pada bagian 5.4 (hlm. 36).