2009-03-11 2 views
0

나는 다음과 같은 EJB (EJB3를 사용) 한 말 :EJB에 로컬 인터페이스를 어떻게 선택합니까?

@Stateless(name="Queries") 
@Remote(Queries.class) 
@Local(Queries.class) 
public final class QueriesEJB implements Queries { 
    ... 
} 

클래스는 로컬 및 원격 인터페이스 모두를 통해 사용할 수 있습니다.

이 EJB의 로컬 인터페이스를 앱의 다른 부분에 삽입하려면 어떻게해야합니까?

특히 로컬 인터페이스를 선택하는 @EJB 주석을 만드는 방법을 모르겠습니다. 예를 들어 다음과 같이 충분합니까?

@EJB(name="Queries") private Queries queries; 

는 특히 단순히 @의 EJB의 'beanInterface'속성을 통해 구별하기위한 목적으로 별도의 로컬 및 원격 인터페이스를 만들지 않도록하고 싶습니다.

답변

3

사양에 따르면 원격 및 로컬 인터페이스를 동시에 가질 수 없습니다. 그러나 수퍼 인터페이스를 만들고 거기에 모든 메서드를 넣은 다음 2 개의 하위 인터페이스를 만듭니다. 그 일을 끝내고 @EJB를 사용하십시오. 이렇게하면 인터페이스를 하나만 유지해야합니다.

편집 : 이전 댓글에서 http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html

+0

사양 참조가 있습니까? – johnstok

+0

1. http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html 2. "평가를위한 사양을 다운로드하거나 사양을 사용하는 응용 프로그램을 작성하려면 아래 버튼을 클릭하십시오"를 클릭하십시오. 3. 다운로드 ejb-3_0-fr-spec-simplified.pdf 4. 16 페이지의 항목 3.2로 이동하십시오. – Antonio

1

EJB가 배포되면 컨테이너는 인터페이스를보고 로컬 및 원격 인터페이스를 식별합니다. 귀하의 예제에서 EJB 컨테이너가 이미 로컬 인터페이스를 사용하고 있다고 말할 수 있습니다. 컨테이너가 로컬 인터페이스를 사용할 수 있기 때문에이 경우 원격 인터페이스를 사용하지 않습니다.

@EJB 주석의 매개 변수로 로컬 인터페이스의 JNDI 이름을 사용하려는 경우.

@EJB(name="java:comp/env/ejb/EntitySupplierLocal") 

위 예제에서 인터페이스 이름에 로컬을 추가했습니다. 귀하의 경우에는 JNDI 컨텍스트를 살펴보고 올바른 이름을 얻거나 알고있을 수도 있습니다.).

일반적으로 비즈니스 메서드가 정의 된 기본 인터페이스를 사용하고 로컬 및 원격 인터페이스를 확장하는 것이 좋습니다. 따라서 메소드를 복제 할 필요가 없으며 로컬 및 원격 액세스 기능을 별도로 확장 할 수 있습니다.

public interface Queries() { .. } 

@Local 
public interface QueriesLocal extends Queries() { .. } 

@Remote 
public interface QueriesRemote extends Queries() { .. } 
+0

작동 - 그림을 이동합니다 .. – johnstok

1

솔루션에서 "단순화 된 EJB3 스펙"의 3.2 절을 참조하십시오 JBoss에서의 EJB 3.0과 완벽있는 Compatibile 수 없습니다.

당신은 쉽게이 오류를 얻을 수 있습니다 :

org.jboss.ejb3.common.resolvers.spi.NonDeterministicInterfaceException: 
beanInterface specified, Queries, is not unique within EJB QueriesEJB 

만이 만들기 :

public interface Queries() //Local by default 

@Remote 
public interface QueriesRemote extends Queries() { ... } 

내가 보스에서 이것을 시도하고 원격 인터페이스가 선택된