Bahar vs EJB. Yay, EJB'nin yerini alabilir mi? [kapalı]


96

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:


201

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.)


7
Bana göre "kilitlenmek", Baharı tanımlamak için çok güçlü bir ifade. Sonuçta, Spring her şeyi bir araya getirmek için tasarlandı, onları değiştirmek için değil, her zaman neyle entegre etmek istediğinizi seçebilirsiniz. Ayrıca, her şeyin kilitleri var, en basit Apache Commons bile bizi içeri kilitliyor, ama yine de her gün kullanıyoruz.
Christopher Yang

3
Oracle, Red Hat ve IBM for Java EE platformları arasında seçim yapabileceğiniz VMWare / Spring'e alternatif satıcılar yoktur. Tüm kastettiğim bu. Spring'in yeteneği veya kullanışlılığı hakkında bir yorum değil. Ben çok beğendim. Her gün kullanıyorum ve geceleri uyuyorum.
duffymo

1
@ChristopherYang bu doğru. Demek istediğim, "Java" bir satıcı kilidi olacaktır. Yani sonunda tartışmayı bırakıp bir şeyler yapmalıyız. :-)
cbmeeks

4
Bu soru neredeyse beş yaşında. Kişisel olarak, EJB'lerin her şekilde HTTP web hizmetlerine kaptırılmış eski teknolojiler olduğunu düşünüyorum. Basit ve açık galibiyet. Bana REST hizmetleri verin ve EJB'lerinizi koruyun. Bahar onları güzelce destekliyor. Dünyanın gittiği yer orası.
duffymo

1
Yanıt için teşekkürler. Sadece mevcut EJB 2.1 uygulamasından geçiş için daha iyi olanı (SPRING, EJB 3.x) değerlendirmek gibi faydaları araştırmak. Bir soru daha, EJB 3.x WebService'i de destekliyor. Öyleyse, Java uygulamaları dağıtımı için JNDI / RMI ve diğer uygulamalar için WS'den faydalanabilir miyiz?
noboundaries

48

Ö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).


1
Eğitici cevap, ancak yeni bir POJO başlatmak yerine neden / ne zaman basit bir POJO enjekte etmeniz gerektiğini merak ediyorum.
Ömer Faruk Almalı

4
Test amaçlı.
Philip

22

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.


Belki Spring gibi bir şeyin sadece servlet motoruna ihtiyacı vardır (EJB herhangi bir JEE konteynerinde kullanılabilir, servlet motoru! = JEE konteyner).
Pascal Thivent

1
Teknik olarak Spring de bir servlet motor gerektirmez. Örneğin, yay testi bir bellek içi bağlam kullanır.
Bozho

3
Eh, teknik olarak, EJB'ler de bu tarafa giderseniz bağımsız bir konteynere ihtiyaç duymaz. EJB 3.1'den beri, EJBContainer.createEJBContainer()gömülü bir konteyner kullanmak için standart API vardır . Yine de ifadeniz yanlış.
Pascal Thivent

Tamam, 3.1 oldukça yeni ve belli ki eklemeleri unuttum. O noktayı cevabımdan çıkardım.
Bozho

-30

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.


8
tamamen yanılıyorsun, özür dilerim
Jakub H

2
özür dilerim @sasi bu doğru veya güzel bir cevaba yakın bile değil .......
Prakash

4
"EJB olmadan bahar olmazdı." Adamım, sen gerçek misin? Hayatınızda hiç bir EJB'nin beyanında "\ @ Stateless" ifadesini veya enjeksiyon için \ @EJB ek açıklamasını kullandınız mı? Bunların Jetty'de mi yoksa Tomcat'te mi işe yarayacağını düşünüyor musunuz? Baharda işlemlerin nasıl yönetildiğini düşünüyorsunuz? Bir Spring uygulamasını bir servlet konteynerine dağıtabileceğinizi biliyorsunuz değil mi?
99Sono

Maalesef, hem Java EE'nin bir parçası olan EJB'ler hem de yapılandırma üzerinden gelenek ilkesi olarak yay hakkında iyi yapılandırılmış bir anlayışınız yok. Gerçekte, derinlere inmezseniz, sonunda onların aynı şey ya da ilgili ya da bu türden bir şey olduğunu düşünebilirsiniz. Neden? ikisinin de enjeksiyon gibi benzerlikleri var ve aralarındaki fark çok büyük. Baharın, EJB'nin karmaşıklığı nedeniyle zaman içinde EJB'nin geri dönüşüne alternatif olarak doğduğu doğrudur ama öyleydi. Java Zamanı sırasında yeterince iyi EE 5 (EJB 3) aynı zamanda baharın
COC'leriyle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.