2010-06-07 2 views
12

Tomcat FAQ에 "Tomcat은 EJB 서버가 아닙니다. Tomcat은 완전한 J2EE 서버가 아닙니다."Enterprise Java Bean이란 무엇입니까?

하지만 경우 :

  • 사용 Spring은 연결 풀링의 (a JPA 공급자로 최대 절전 모드 및 사용)
  • 구성 C3P0를 JPA와 주석을 내 개체에 주석을
  • 를 애플리케이션 컨텍스트를 제공합니다 데이터 소스
  • 내 서비스 방법 에 @Transactional 주석을 달아주십시오 (및 JTA 제공 업체로 Atomikos 사용)
  • 사용 JAXB 정렬 화 및
  • 그리고 아마도 내 자신의 JNDI 능력

나는 효과적으로 자바 EE 애플리케이션 서버가없는 추가 비 정렬? 그리고 내 콩 EJB가 아닌가요? 아니면 다른 정의 특징이 있습니까?

Java EE 호환 응용 프로그램 서버가 일부 타사 하위 시스템과 함께 Tomcat에서 쉽게/쉽게 얻을 수 없다는 점은 무엇입니까?

+3

참고로 Apache Tomcat은 전체 JavaEE 서버의 일부로 사용할 수 있습니다. 보다 구체적으로 JBoss 또는 Apache Geronimo. – Powerlord

+0

가장 최근에는 Apache TomEE –

답변

4

하지만 (...) 나는 효과적으로 자바 EE 애플리케이션 서버가없는 추가하면? 그리고 내 콩 EJB가 아닌가요? 아니면 다른 정의 특징이 있습니까?

아니요, Java EE 애플리케이션 서버가 없으므로 본격적인 Java EE 애플리케이션 서버는 Tomcat + Spring + 독립형 트랜잭션 관리자 이상입니다. JMS 공급자와 EJB 컨테이너를 추가하더라도 여전히 Java EE 서버는 없습니다. 모든 부품 간의 접착제는 중요한 IMO이며 Java EE 컨테이너의 부가가치의 일부입니다.

EJB의 경우 EJB 사양은 JPA보다 훨씬 뛰어나며 세션 빈 및 메시지 구동 Bean을 지정합니다. 실제로 JPA가 Java EE의 EJB 3.0 사양에 포함되어 있어도 JPA Entities를 EJB로 간주하지 않습니다 5 역사적인 이유로 - Java EE 6, JPA 2.0 및 EJB 3.1에서는 별다른 사양이 아닙니다. @Transactional으로 주석 처리 된 Spring 빈은 Session Bean과 동일하지 않습니다. Java EE 컨테이너는 Session Beans로 더 많은 일을 할 수 있습니다 (아래 참조). 당신은 그들을 필요로하지 않을지도 모르지만 여전히, 그들은 엄격하게 동등하지 않습니다.

마지막으로, Java EE 컨테이너는 표준을 구현하고 Spring 컨테이너는 독점권을 갖지 않습니다.

Java EE 호환 응용 프로그램 서버가 일부 타사 하위 시스템과 함께 Tomcat에서 쉽게/쉽게 얻을 수 없다는 것을 어떻게 알 수 있습니까?

내가 말했듯이 "접착제"는 부가가치의 일부이며 전체의 견고성에 크게 기여한다고 생각합니다. 그런 다음, ewernli의 answer은 달성하기 어려운 것을 아주 잘 밑줄을 긋습니다.난 그냥 추가 할 것 :

  • 클러스터링 및 페일 오버 (결함 허용을 달성하기 위해)
  • 관리 시설

예, 좋은 자바 EE 서버가 꽤 깔끔한 일을 할 것입니다 (연결 풀의 클러스터링, JNDI 트리, JMS 대상, 멱등 원을 통한 자동 재 시도, 스마트 EJB 클라이언트, 트랜잭션 복구, 서비스 마이그레이션 등)을 향상시킵니다. "미션 크리티컬 (mission critical)"어플리케이션 - 대다수는 그렇지 않습니다 - 이것은 중요합니다. 그런 경우 Servlet API 위에있는 라이브러리는 IMO가 아닙니다.

1

EJB 구현은 준수하는 모든 EJB 서버에서 실행되도록 작성되고 패키지화 된 bean입니다. 설명대로하면 작동하지만 다른 공급 업체의 응용 프로그램 서버로 이식 할 수 없습니다.

그래서 EJB는 특정 사양을 준수하므로 이식 가능한 표준입니다.

실제로 많은 EJB는 완전히 호환되지 않거나 응용 프로그램 서버 중립적이지 않습니다. 그러나 주 서버에서는 이러한 문제가 있기 때문에 Application Server 공급 업체를 변경 한 경우 GlassFish, JBoss 또는 Weblogic 서버로 설명 된 아키텍처를 이동하려고 시도하는 것보다 작은 비 호환성 문제를 해결하는 것이 훨씬 쉽습니다.

편집 : 귀하의 의견에 대한 응답으로 EJB를 적절하게 주석 및/또는 EJB를 준수하는 방식으로 액세스 한 코드가 변경없이 사용할 수있는 방식으로 XML을 사용하여 구성 할 필요가 없습니다.

의견에 두 가지 각도가 있습니다. 하나는 JBoss 또는 Tomcat 대신 다른 기능을 사용하여 배포 할 때 어떤 기능을 잃게됩니까? 당신이 의존하는 모든 프레임 워크를 가져왔다면 아무 것도 없을 것입니다. 그러나 코드를 Weblogic으로 옮기고 싶다면 (예를 들어, 일부 기능을 사용하려는 경우) 코드가 계속 유지 될 수 있도록 상당한 변경이 필요합니다.

다른 모든 방법을 통해 모든 EJB 기능을 복제 할 수 없다는 것은 아닙니다. 단지 사양이 아니므로 구현 독립적이지 않습니다.

+0

내가 설명하는 아키텍처가 실제 EJB 응용 프로그램 서버로 이식 가능하지 않은 이유는 무엇입니까? 그것은 실행되지 않을까요? 다시 구성하거나 다시 작성해야합니까? – HDave

5

EJB는 javax.ejb API를 준수하는 JavaEE 구성 요소입니다.

JavaEE는 API 모음이므로 모든 것을 사용할 필요는 없습니다.

Tomcat은 서블릿 및 JNDI와 같은 일부 JavaEE API 만 구현한다는 점에서 "부분적인"JavaEE 서버입니다. 예 : EJB 및 JMS를 지원하므로 완전한 JavaEE 구현이 아닙니다.

비트와 조각 (예 : OpenEJB, HornetQ)을 추가하면 누락 된 부분을 추가하면 완전한 JavaEE 서버가됩니다. 그러나 상자 밖에서 Tomcat은 그렇게하지 않으며, 시도하지도 않습니다.

+0

그래서 본질적으로, 주석 된 POJO는 EJB의 많은 기능을 가지고 있지만, Tomcat은 javax.ejb를 구현하지 않기 때문에 (내 콩은 그 API를 사용하지 않는다) 공식적으로 그렇지 않다. EJB. 내 아키텍처가 응용 프로그램 서버 내에서 올바르게 실행된다고 가정하면 올바르게 맞습니까? – HDave

+1

@HDave : JPA 주석보다 EJB에 더 많은 것이 있습니다. JPA 주석을 보완하고 확장하는 트랜잭션, 보안 및 라이프 사이클과 같은 것들을 다루고 있습니다. – skaffman

+0

확실한 - 주석에 의해 나는 JPA + Transaction + Security를 ​​의미했다. 나는이 모든 것이 JEE 응용 프로그램 서버에서 작동한다고 가정합니다. 이게 옳은 거니? – HDave

3

1) EJB와 JPA 엔티티를 혼동하고 있습니다. JPA는 EJB3 사양에 속하지만 독립 실행 형 기술을 지향합니다.

2) EJB는 다음과 같습니다. stateless beans, stateful beans 및 message driven beans. 이러한 각 기능은 봄을 사용하여 쉽게 달성 할 수 있지만 스프링은이 용어를 사용하지 않습니다. Spring에서는 EJB와 마찬가지로 POJO + "magic"을 가지지 않는다. Spring에서는 POJO + 자신 만의 설정 (때로는 마술처럼 느껴진다)이다. 가장 큰 차이점은 Spring이 더 많이하고 Application Server가 적게 차지한다는 것입니다. Spring 애플 리케이션이 Tomcat에 만족하고 ejb3 앱에 '실제'애플리케이션 서버가 필요한 이유입니다.

제 생각에는 90 %의 응용 프로그램을 spring + tomcat을 사용하여 배포 할 수 있지만 ejb3은 거의 필요하지 않습니다.

1

Java EE 응용 프로그램 서버가 있습니까? 그리고 내 콩 EJB가 아닌가요? 또는 특성을 정의하는 다른 이 있습니까?

빠른 응답 EJB는 실제로 Java EE 사양을 따라야합니다. Tomcat은 응용 프로그램 서버가 아닌 Java EE 컨테이너입니다. 그것은 자바 EE 호환 응용 프로그램 서버가 제공하는 것이 무엇

입니다 당신이 할 수없는 쉽게/쉽게 일부 제 3 자 하위 시스템 톰캣에서 얻을?

두 번째 질문에 대한 빠른 대답. 당신의 경우에는 거의 없다.

EJB는 실제로 너무 무거운 경향이 있으며, 사람들은 본질적으로 과용되었을 때 문제를 해결하기 위해 사용하기 시작했습니다. Spring과 같은 프레임 워크는 EJB를 사용하지 않고 이러한 문제를 해결하기 위해 만들어졌습니다. Spring이 소개 된 첫 번째 책은 심지어 "EJB가없는 J2EE 개발"이라고 생각합니다.

+1

먼저 Tomcat은 Java EE 컨테이너가 아닙니다. 둘째, EJBs = heavy는 J2EE 1.4에서는 true이지만 EJB3에는 적용되지 않습니다. 우리는 2004 년 더 이상 없습니다 ... –

+0

컨테이너가 EJB를 지원하지 않으면 자바 EE 컨테이너가 아닙니다. 그러나 Wikipedia에 따르면 Tomcat은 응용 프로그램 서버입니다 (기술적으로는 사실이지만 혼란 스럽긴하지만). http://en.wikipedia.org/wiki/Application_server – HDave

2

EJB가 무엇이며 EJB가 아닌지에 대한 엄격한 정의 외에 Tomcat에 많은 것을 추가하고 있습니다. 가지고있는 것이 EJB 서버 일지라도 더 이상 Tomcat이 아닙니다.

FAQ는 정확합니다. Tomcat은 EJB 서버가 아닙니다. 그러나 충분한 여분의 라이브러리와 코드를 쌓아두면 많은 다른 것들이 될 수 있습니다.

+0

희귀하고 깨달은 대답입니다. 더 많은 사람들이이 관점을 가져야합니다. 자신 만의 JavaEE와 같은 스택을 효과적으로 만들었 으면 "그냥 Tomcat"이라고 말할 수는 없습니다. –

3

실제로, 당신은 거의 심지어 휴대용 EJB3 컨테이너를 포함 할 수있다 : 본격적인 헤비급 응용 프로그램 서버에 톰캣/봄을 설정할 수 있습니다 충분한 노력 ... 그것은 것이 무엇

입니다 놓으면 Java EE 호환 응용 프로그램 서버는 을 쉽게/쉽게 Tomcat에서 얻을 수 없습니다. 일부 타사 하위 시스템이 있습니까?

  • 상태 세션 빈 (SFSB)
  • 확장 된 영속 컨텍스트
  • 응용 프로그램 클라이언트 컨테이너/자바 웹 스타트 :

은 여전히 ​​제 3 자 모듈을 얻을하기 어려운 몇 가지 기능이 있습니다

  • 응용 프로그램에 따라 클러스터링. 서버
  • CORBA 상호 운용성
  • JCA 통합 ~
  • 원격 ~
  • 컨테이너 관리 트랜잭션 ~ 분산 트랜잭션의
  • 괜찮은 관리 (예 : 휴리스틱 텍사스 복구)와
  • 항목 ~ 또한 스프링에 의해 지원되었지만, 적어도 나의 최선의 지식은 그렇게 사소한 것은 아닙니다. 이 답변에

    몇 자세한 내용 : EJB vs Spring

    +0

    +1 좋은 답변입니다. 하지만 장애 복구 및 복구 기능도 추가 할 예정입니다. Tomcat을 스테로이드로 사용하지 않아도되며, 이는 본격적인 미들웨어 사양 및 구현의 중요한 부분입니다. –

    +0

    맞습니다. 정확히 동일하지 않더라도 클러스터링의 일부로 간주했습니다. 또한 JEE 스펙은 클러스터링을 지원할 수 있도록 작성되었지만 준수하도록 요구하지는 않습니다. 그러나 이것이 앱의 선택에서 중요한 측면이라는 데 전적으로 동의합니다. 섬기는 사람. – ewernli

    관련 문제