봄 대 EJB. Spring이 EJB를 대체 할 수 있습니까? [닫은]


96

SpringEJB 처럼 트랜잭션을 사용할 수 있기 때문에 . 나를 위해 Spring은 EJB 사용 요구 사항을 대체 할 수 있습니다. 누구든지 EJB 사용의 추가 이점이 무엇인지 말해 줄 수 있습니까?

답변:


201

Spring은 처음부터 EJB의 대안으로 개발되었으므로 대답은 물론 EJB 대신 Spring을 사용할 수 있다는 것입니다.

EJB 사용에 "장점"이 있다면 그것은 당신 팀의 기술에 달려 있다고 말하고 싶습니다. Spring에 대한 전문 지식이없고 EJB 경험이 많은 경우 EJB 3.0을 고수하는 것이 좋은 방법입니다.

이론적으로 EJB 표준을 지원하도록 작성된 앱 서버는 호환되는 하나의 Java EE 앱 서버에서 다른 서버로 이식 될 수 있습니다. 그러나 이는 하나의 공급 업체에 묶여있는 모든 공급 업체별 확장에서 벗어나는 것을 의미합니다.

Spring은 앱 서버 (예 : WebLogic, Tomcat, JBOSS 등)에 의존하지 않기 때문에 쉽게 포트를 연결할 수 있습니다.

그러나 당신은 Spring에 잠겨 있습니다.

Spring은 Guice 또는 다른 DI 프레임 워크로 전환하기로 결정한 경우에도 그들이 만지는 모든 문제에 도움이되는 좋은 OO 디자인 관행 (예 : 인터페이스, 레이어, 관심사 분리)을 권장합니다.

업데이트 :이 질문과 답변은 2014 년에 5 년이 지난 것입니다. 그 당시 프로그래밍 및 애플리케이션 개발의 세계가 많이 바뀌 었다고 말할 필요가 있습니다.

더 이상 Java 또는 C #, Spring 또는 EJB 중 하나의 선택이 아닙니다. vert.x를 사용하면 Java EE를 모두 피할 수 있습니다. 앱 서버없이 확장 성이 뛰어난 다중 언어 애플리케이션을 작성할 수 있습니다.

업데이트 : 이제 2016 년 3 월입니다. Spring Boot는 Java EE 앱 서버없이 애플리케이션을 작성하는 더 나은 방법을 제공합니다. 실행 가능한 JAR을 생성하고 JVM에서 실행할 수 있습니다.

Oracle이 Java EE 사양을 계속 지원할 것인지 궁금합니다. 웹 서비스가 EJB를 대신했습니다. EJB 솔루션이 죽었습니다. (그냥 내 의견입니다.)


7
제 생각에 "lock in"은 Spring을 설명하기에는 너무 강한 표현입니다. 결국, Spring은 모든 것을 대체하지 않고 함께 붙일 수 있도록 설계되었으므로 언제든지 통합 할 대상을 선택할 수 있습니다. 게다가, 모든 것이 고정되어 있고 심지어 가장 단순한 Apache Commons조차도 우리를 가두지만 우리는 여전히 매일 그것을 사용하고 있습니다.
크리스토퍼 양

3
Oracle, Red Hat 및 IBM for Java EE 플랫폼 중에서 선택할 수있는 VMWare / Spring의 대체 공급 업체는 없습니다. 그게 내가 의미 한 전부입니다. Spring의 기능이나 유용성에 대한 주석이 아닙니다. 나는 그것을 매우 좋아하게된다. 나는 그것을 매일 사용하고 밤에 자요.
duffymo 2013-06-06

1
@ChristopherYang 맞습니다. 내 말은, "자바"는 벤더 잠금이 될 것입니다. 결국, 우리는 논쟁을 멈추고 무언가를 완료해야합니다. :-)
cbmeeks 2013-07-30

4
이 질문은 거의 5 년 전입니다. 개인적으로 EJB는 HTTP 웹 서비스에서 모든면에서 잃어버린 오래된 기술이라고 생각합니다. 간단하고 개방적인 승리. REST 서비스를 제공하면 EJB를 유지할 수 있습니다. Spring은 그들을 멋지게 지원합니다. 그것이 세상이 갔던 곳입니다.
duffymo

1
답장을 보내 주셔서 감사합니다. 기존 EJB 2.1 애플리케이션에서 마이그레이션 할 때 더 나은 것 (SPRING, EJB 3.x)을 평가하는 것만으로도 이점을 찾고 있습니다. 한 가지 더 질문, EJB 3.x는 WebService도 지원합니다. 그렇다면 Java 앱 배포 용 JNDI / RMI와 다른 앱용 WS의 이점을 얻을 수 있을까요?
noboundaries

48

먼저 명확하게 말하겠습니다. Spring을 사용하지 말아야한다는 말은 아니지만 몇 가지 이점을 요구하기 때문에 여기에 최소한 두 가지가 있습니다.

  • EJB 3은 표준이지만 Spring은 그렇지 않습니다 (사실상 표준이지만 동일한 것은 아닙니다). 이것은 가까운 미래에 변경되지 않을 것입니다. 모든 애플리케이션 서버에서 Spring 프레임 워크를 사용할 수 있지만 Spring 애플리케이션은 Spring 자체와 Spring에 통합하도록 선택한 특정 서비스 모두에 고정되어 있습니다.

  • Spring 프레임 워크는 애플리케이션 서버 및 서비스 라이브러리 위에 있습니다. 서비스 통합 코드 (예 : 데이터 액세스 템플릿)는 프레임 워크에 상주하며 애플리케이션 개발자에게 노출됩니다. 반대로 EJB 3 프레임 워크는 애플리케이션 서버에 통합되고 서비스 통합 코드는 인터페이스 뒤에 캡슐화됩니다. 따라서 EJB 3 공급 업체는 애플리케이션 서버 수준에서 작업함으로써 성능과 개발자 경험을 최적화 할 수 있습니다. 예를 들어, JPA 엔진을 JTA 트랜잭션 관리에 밀접하게 연결할 수 있습니다. 또 다른 예는 EJB 3 개발자에게 투명한 클러스터링 지원입니다.

EJB 3은 완벽하지는 않지만 여전히 일부 기능이 부족합니다 (예 : 간단한 POJO와 같은 관리되지 않는 구성 요소 삽입).


1
교육적인 대답이지만 새로운 POJO를 초기화하는 대신 간단한 POJO를 주입해야하는 이유 /시기가 궁금합니다.
Ömer Faruk Almalı 2014 년

4
테스트 목적으로.
Philip

22

파스칼의 포인트는 유효합니다. 그러나 Spring에 찬성하는 다음이 있습니다.

  • EJB 사양은 실제로 약간 느슨하므로 다른 응용 프로그램 서버에서 다른 동작을 관찰 할 수 있습니다. 물론 대부분의 경우에는 해당되지 않지만 일부 "어두운 모서리"에 대해 그런 문제가있었습니다.

  • Spring에는 spring-test, AOP, MVC, JSF 통합 등과 같은 많은 추가 기능이 있습니다. EJB에는 이러한 기능 중 일부 (예 : 인터셉터)가 있지만 제 생각에는 많이 개발되지 않았습니다.

결론적으로, 그것은 주로 정확한 경우에 달려 있습니다.


Spring 과 같은 것은 서블릿 엔진 만 필요로 할 수 있습니다 (EJB는 모든 JEE 컨테이너, 서블릿 엔진! = JEE 컨테이너에서 사용할 수 있음).
Pascal Thivent

1
글쎄, 기술적으로 Spring은 서블릿 엔진도 필요하지 않습니다. 예를 들어 spring-test는 메모리 내 컨텍스트를 사용합니다.
Bozho

3
글쎄, 기술적으로 EJB는 이런 식으로 가면 독립형 컨테이너가 필요하지 않습니다. EJB 3.1부터는 EJBContainer.createEJBContainer()임베디드 컨테이너를 사용하는 표준 API가 있습니다. 따라서 여전히 귀하의 진술은 잘못되었습니다.
Pascal Thivent

좋아, 3.1은 꽤 새롭고 분명히 추가 사항을 잊어 버렸습니다. 내 대답에서 그 점을 제거했습니다.
Bozho

-30

Spring은 EJB를 대체하는 것이 아니라 보완하기위한 것입니다. Spring은 EJB 위에있는 레이어입니다. 아시다시피 EJB의 코딩은 API를 사용하여 수행됩니다. 즉, Spring 프레임 워크를 사용하여 API에서 모든 것을 구현해야합니다. 상용구 코드를 생성 한 다음 해당 플레이트를 가져 와서 여기에 몇 가지를 추가하면 모든 작업이 완료됩니다. 내부적으로 Spring은 EJB와 연결되어 있습니다. Spring은 EJB 없이는 존재할 수 없습니다.

Spring을 사용하는 가장 큰 장점은 클래스간에 결합이 전혀 없다는 것입니다.


8
당신은 완전히 잘못 죄송합니다
야쿱 H

2
죄송합니다 .......이 근처에도 정확한이나 좋은 대답하지 @sasi
프라 카쉬

4
"EJB 없이는 봄이 존재할 수 없습니다." 야, 진짜야? EJB 선언에서 "\ @Stateless"를 사용했거나 주입에 \ @EJB 주석을 사용한 적이 있습니까? Jetty 또는 Tomcat에서 작동 할 것이라고 생각하십니까? 거래가 봄에 어떻게 관리된다고 생각하십니까? 서블릿 컨테이너에 Spring 애플리케이션을 배포 할 수 있다는 것을 알고 있습니까?
99Sono

죄송합니다. Java EE의 일부인 EJB와 구성에 대한 관례 원칙 인 Spring에 대해 모두 잘 이해하지 못했습니다. 실제로 깊은 곳을 파지 않으면 그들이 얼마나 똑같거나 관련이 있는지 또는 그런 종류의 어떤 것이라고 생각하게 될 수 있습니다. 왜? 둘 다 주입과 같은 유사점이 있지만 그 차이는 엄청납니다. EJB의 복잡성으로 인해 과거 EJB의 대안으로 Spring이 탄생 한 것이 사실입니다. Java EE 5 (EJB 3) 기간 동안 충분히
좋았
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.