Yana Bahar gibi işlemleri kullanabilir EJB . Benim için Spring, EJB kullanma gerekliliğinin yerini alabilir. EJB kullanmanın ekstra avantajları neler olabilir?
Yanıtlar:
Bahar, başlangıcından itibaren EJB'ye bir alternatif olarak geliştirildi, bu nedenle cevap, elbette EJB'lerin yerine Spring'i kullanabilirsiniz.
EJB'leri kullanmanın bir "avantajı" varsa, bunun ekibinizin becerilerine bağlı olacağını söyleyebilirim. Spring uzmanlığınız yoksa ve çok fazla EJB deneyiminiz yoksa, EJB 3.0'a bağlı kalmak iyi bir hareket olabilir.
EJB standardını desteklemek için yazılmış uygulama sunucuları teorik olarak uyumlu bir Java EE uygulama sunucusundan diğerine taşınabilir. Ancak bu, sizi tek bir satıcıya kilitleyen, satıcıya özgü tüm uzantılardan uzak durmak anlamına gelir.
Uygulama sunucuları (ör. WebLogic, Tomcat, JBOSS, vb.) Arasında bağlantı noktalarını kolayca yayar çünkü bunlara bağlı değildir.
Ancak, Spring'e kilitlendiniz.
Spring, Guice veya başka bir DI çerçevesine geçmeye karar verseniz bile, dokundukları herhangi bir soruna fayda sağlayan iyi OO tasarım uygulamalarını (örneğin, arayüzler, katmanlar, endişelerin ayrılması) teşvik eder.
Güncelleme: Bu soru ve cevap 2014 yılında beş yaşında. Programlama ve uygulama geliştirme dünyasının o dönemde çok değiştiği söylenmelidir.
Artık sadece Java veya C #, Spring veya EJB'ler arasında bir seçim değil. Vert.x ile Java EE'den tamamen kaçınmak mümkündür. Bir uygulama sunucusu olmadan yüksek oranda ölçeklenebilir, çok dilli uygulamalar yazabilirsiniz.
Güncelleme: Şimdi Mart 2016. Spring Boot, Java EE uygulama sunucuları olmadan uygulama yazmak için daha da iyi bir yol sunar. Çalıştırılabilir bir JAR oluşturabilir ve bir JVM'de çalıştırabilirsiniz.
Oracle'ın Java EE özelliğini desteklemeye devam edip etmeyeceğini merak ediyorum. EJB'ler için web hizmetleri devralındı. EJB çözümü öldü. (Sadece benim düşüncem.)
Öncelikle açıkça söyleyeyim, Spring'i kullanmamalısın demiyorum ama bazı avantajlar istiyorsun, işte bunlardan en az ikisi:
EJB 3 bir standartken, Spring standart değil (fiili bir standart ama aynı şey değil) ve bu öngörülebilir gelecekte değişmeyecek. Spring çerçevesini herhangi bir uygulama sunucusuyla kullanabilseniz de, Spring uygulamaları hem Spring'in kendisine hem de Spring'e entegre etmeyi seçtiğiniz belirli hizmetlere kilitlenir.
Spring çerçevesi, uygulama sunucularının ve hizmet kitaplıklarının üstüne oturur. Hizmet entegrasyon kodu (örneğin, veri erişim şablonları) çerçevede bulunur ve uygulama geliştiricilerinin kullanımına sunulur. Bunun aksine, EJB 3 çerçevesi uygulama sunucusuna entegre edilmiştir ve hizmet entegrasyon kodu bir arayüzün arkasında kapsüllenmiştir. EJB 3 satıcıları böylece uygulama sunucusu seviyesinde çalışarak performansı ve geliştirici deneyimini optimize edebilir. Örneğin, JPA motorunu JTA işlem yönetimine yakından bağlayabilirler. Diğer bir örnek, EJB 3 geliştiricilerine şeffaf olan kümeleme desteğidir.
EJB 3 mükemmel değildir, ancak yine de bazı özelliklerden yoksundur (örneğin, basit POJO'lar gibi yönetilmeyen bileşenlerin enjeksiyonu).
Pascal'ın puanları geçerlidir. Bununla birlikte, Bahar lehine aşağıdakiler var.
EJB spesifikasyonu aslında biraz gevşektir ve bu nedenle farklı uygulama sunucuları ile farklı davranışlar gözlemlenebilir. Elbette bu çoğu durumda doğru olmayacak, ancak bazı "karanlık köşeler" için böyle bir sorun yaşadım.
Baharın, yay testi, AOP, MVC, JSF entegrasyonu vb. Gibi birçok ekstra özelliği vardır. EJB'de bunlardan bazıları vardır (örneğin, önleyiciler), ancak bence bunlar o kadar da gelişmiş değil.
Sonuç olarak, esas olarak sizin durumunuza bağlıdır.
EJBContainer.createEJBContainer()
gömülü bir konteyner kullanmak için standart API vardır . Yine de ifadeniz yanlış.
Yay, EJB'nin yerini alması değil, tamamlaması içindir. Yay, EJB'nin üstünde bir tabakadır. Bildiğimiz gibi, EJB'nin kodlanması API kullanılarak yapılır, bu da API'lerde her şeyi Spring çerçevesini kullanarak uygulamamız gerektiği anlamına gelir. Kazan plakası kodu oluşturabiliriz, sonra o plakayı alıp üzerine bir şeyler ekleyebiliriz, sonra her şey yapılır. Bahar dahili olarak EJB ile bağlantılıdır - Bahar EJB olmadan var olmazdı.
Spring kullanmanın temel avantajı, sınıflar arasında hiç bir bağlantı olmamasıdır.