EJB에서 로컬 / 원격 및 인터페이스없는보기 란 무엇입니까?


80

EJB에서 다른 클라이언트 뷰가 필요한 이유와 목적을 이해하려고합니다. 누군가 설명하려고 할 수 있습니까?

답변:


126

원격 클라이언트보기

EJB와 클라이언트가 분산 환경에있을 때-EJB와 클라이언트가 별도의 Java 가상 머신에 상주하게됩니다. 예 : WebSphere Application Server에서 호스팅되는 EJB 및 Tomcat 서버에서 호스팅되는 EJB API를 사용하는 서블릿.

로컬 클라이언트보기

다른 엔터프라이즈 빈 또는 클라이언트가 단일 JVM 내에서만 빈 주소를 지정한다는 것이 보장되는 경우에만. 예를 들어, EJB와 동일한 WebSphere 서버에 배포 된 서블릿.

인터페이스 없음보기

로컬 클라이언트보기와 거의 동일하지만 차이점이 있습니다. 이 경우 클라이언트 뷰 인터페이스를 구현하는 데 빈 클래스가 필요하지 않습니다. Bean 클래스의 모든 공용 메소드는 자동으로 호출자에게 노출됩니다. 인터페이스없는보기는 삽입 또는 JNDI 조회를 통해 로컬 또는 원격보기와 마찬가지로 항상 EJB 참조를 획득합니다. 그러나 EJB 참조의 Java 유형은 로컬 인터페이스 유형이 아니라 Bean 클래스 유형입니다. 이것은 Java EE6의 일부로 도입 된 편의입니다.

로컬 클라이언트보기와 인터페이스없는보기의 차이점

인터페이스가없는보기의 경우 클라이언트와 대상 Bean이 동일한 애플리케이션 (EAR)에 패키지되어야합니다. 로컬보기의 경우 클라이언트는 엔터프라이즈 응용 프로그램이 아닌 별도의 응용 프로그램으로 패키지화 될 수 있습니다. 따라서 구성 요소를 세분화하는 측면에서 더 많은 유연성을 제공합니다.

API 사용 시나리오에 따라 로컬 클라이언트보기와 인터페이스없는보기를 사용할 수 있습니다. 인터페이스가없는보기가 향후 사양에서 유연한 기능을받을 가능성이 매우 높습니다.

이유

역사적 으로든 그렇지 않든, EJB 서비스를 사용하려는 클라이언트는 컨테이너에서 빈을 "조회"해야했습니다 (특정 초기 컨텍스트 사용). 모든 호출이 컨테이너에서 제공하는 특수 EJB 참조 (프록시)를 통해 이루어지기 때문입니다. 이를 통해 컨테이너는 풀링, 컨테이너 관리 트랜잭션 등과 같은 모든 추가 빈 서비스를 제공 할 수 있습니다. 따라서 클라이언트는 new운영자 로 EJB를 명시 적으로 인스턴스화 할 수 없습니다 . 클라이언트보기는 클라이언트가 액세스 할 수있는 특정 인터페이스를 통해 제공됩니다. 서버 측에서 프록시 실현은 이러한 인터페이스를 기반으로 수행됩니다. 위에서 언급 한대로 서로 다른 배포 시나리오에 대해 서로 다른 클라이언트보기가 정의됩니다.


5
다른 엔터프라이즈 응용 프로그램간에 로컬 클라이언트보기를 사용할 수 있는지 여부가 궁금합니다. EJB 3.2 사양, 섹션 3.2.2에서 로컬 클라이언트 뷰를 통해 다른 애플리케이션에서 빈을 호출하는 것은 벤더에 따라 다르며 컨테이너에서 지원되지 않을 수 있다고 명시되어 있습니다. 특정 앱 서버를 염두에두고 계 셨나요?
mcmil

무슨 일이야? 우리는 "새로운"는 EJB (이 일어날 수있는 경우 동일한 응용 프로그램에서 클라이언트와 EJB 숙박) 경우
lovespring

2
사용 new하면 새 인스턴스를 얻게됩니다. 그게 다야. 이 새 인스턴스는 풀링, 컨텍스트 설정 등의 측면에서 컨테이너의 "지원"을 갖지 않습니다. 자체적으로 실행됩니다.
반지 전달자

JBoss 7.1.3에서 방금 깨달은 또 다른 점은 Local 또는 Remote로 표시되지 않은 인터페이스를 구현하는 EJB가있을 때 CDI Inject를 해제하는 CDI Bean의 인터페이스 유형으로 EJB를 주입 할 수 있다는 것입니다. 이것은 EJB의 어떤 견해입니까? 재미있는 사실은 JBoss의 버그로 인해 로컬 또는 원격 인터페이스 유형을 CDI 주입 할 수 없다는 것입니다.
Gandalf

@mcmil 귀하의 결과에 동의하십시오. 이것은 확실히 공급 업체에 따라 다릅니다. EJB 3.1 사양에서 언급 한 것과 동일합니다.
Baimai Wu

3

EJB 3.1 사양의 섹션 3.2.2에 따라 :

로컬 클라이언트보기를 통한 엔터프라이즈 Bean에 대한 액세스는 로컬 클라이언트보기를 제공하는 엔터프라이즈 Bean과 동일한 애플리케이션 내에 패키지 된 로컬 클라이언트에 대해서만 지원되어야합니다. 이 사양을 준수하는 구현은 선택적으로 다른 응용 프로그램에 패키지 된 로컬 클라이언트에서 엔터프라이즈 빈의 로컬 클라이언트보기에 대한 액세스를 지원할 수 있습니다. 로컬 클라이언트보기에 대한 응용 프로그램 간 액세스를위한 구성 요구 사항은 공급 업체별로 다르며이 사양의 범위를 벗어납니다. 로컬 클라이언트보기에 대한 응용 프로그램 간 액세스에 의존하는 응용 프로그램은 이식 할 수 없습니다.

인터페이스가없는보기는 빈이 별도의 인터페이스를 선언하지 않고도 로컬 클라이언트보기를 노출 할 수있는 편리한 기능입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.