2014-04-04 3 views
0

WAR에서 EJB 컨테이너를 정의/실행할 때 EJB의 기능에 차이가 있습니까? 하나의 접근법과 다른 접근법을 결정할 때의 장점과 단점은 무엇입니까?WAR에서 EJB를 실행하는 것과 다른 EJB 컨테이너를 실행하는 것의 차이점

WAR에서 액세스 할 때 우리는 어떤 기능을 잃습니까?

개발자는 REST 웹 서비스 작성/액세스에 EJB를 사용하려고합니다.

우리 건축가 중 한 명이 아래에서 언급했습니다. 이런 이유 때문에 그는 EAR에 추가 될 항아리 (jar)뿐만 아니라 REST 엔드 포인트로 사용하기 위해 WAR에 추가되는 별도의 EJB를 갖기를 원합니다. 내가 여러 위치

나는 REST 서비스 구현으로 EJB를 사용하여 읽은 문서에서
I’d prefer our approach to put transaction/service based code in EJBs to 
leverage Container Managed Transactions, JPA, MDB and all the good stuff EJBs 
have to offer. 

에 그것을 가지고하지 않으려는 것, 그것은

Add the EJB class to the WEB-INF/classes directory of your WAR file or to a 
JAR that is located in your WEB-INF/lib directory. When a client makes a request 
to a JAX-RS annotated enterprise bean, the JAX-RS runtime environment looks up 
and uses an EJB instance of the class to invoke the resource method. 

그래서, 내가 알고 싶은 말한다 우리의 경우 WAR를 빌드 할 때 WEB-INF/classes에 클래스가 추가되도록 WAR 소스에 소스를 생성하는 것처럼 EJB를 WAR에 넣으십시오. 대신에 동일한 ejb jar를 두 개의 다른 위치에 두지 않아도됩니다. 어떤 용도로 사용 되는가? REST 웹 서비스 종점과 다른 기능 간에는 모든 요구 사항을 충족시킬 것인가 아니면 항아리를 두 곳에 놓아야 할 것인가?

Websphere 8.5를 EJB 3.1과 함께 사용하고 있습니다.

답변

1

두 차의 차이는 EJB 3.1 사양의 섹션 15.4에서 강조 있습니다 : 워해머와 WAR의 다른 모든 EJB를 가진 WAR 점유율

  1. 모든 EJB를 구성 요소의 네임 스페이스 (java:comp). 일반적으로 각 EJB에는 자체 구성 요소 네임 스페이스가 있습니다. 이렇게하면 참조 이름과 바인딩을 쉽게 공유 할 수 있지만 (EE 6에서는 java:module 또는 java:app을 사용하여 명시 적으로 수행 할 수 있지만) 큰 WAR에서 충돌이 발생할 가능성이 높아집니다.
  2. EJB 클래스는 WAR 클래스 로더에 의해로드됩니다. 실제로, 이것은별로 중요하지 않습니다. 클래스 로딩 문제가 발생하는 경우에는 알고 있어야 할 것입니다.

EJB를 REST 서비스로 사용하려면 EJB를 WAR에 패키지화해야합니다. WAR 및 EJB 모듈에 대해 EJB 로직을 "복제"하는 것에 관심이 있다면 EJB 모듈에 기본 클래스를 선언 한 다음 기본 클래스를 확장하고 WAR에있는 하위 클래스를 선언하고 주석을 달 수 있습니다. @Stateless 또는 @Singleton.

+0

내 질문에 더 많은 줄이있다. 만약 내가 EJB가 WAR가 있다면, 트랜잭션, JPA 기능 등과 같은 EJB 기능을 제공 할 것인가?하지만 그것은 단지 확인을 원한다고 생각한다. – adbdkb

+0

물론입니다. EJB-in-WAR에서는 동일한 서비스를 모두 사용할 수 있습니다. –

0

EJB 기능과 관련하여 WAR 또는 EJB 모듈에서 EJB를 패키징하는 데 차이가 없습니다.

WAR에서 EJB를 패키지해야하는 상황이 있습니다. 동시에 EJB 인 REST 엔드 포인트가있는 경우.

WAR는 대부분 프론트 엔드 기능을 캡슐화합니다. 이러한 상황에서는 EJB를 WAR에 넣는 것은 좋지 않은 디자인 관점에서 나온 것입니다.