문제

다음 ejb (EJB3 사용)가 있다고 말합니다.

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

이 클래스는 로컬 인터페이스와 원격 인터페이스를 통해 제공됩니다.

앱의 다른 부분 에서이 EJB의 로컬 인터페이스를 어떻게 주입 할 수 있습니까?

구체적으로, 나는 현지의 상호 작용. 예를 들어, 다음과 같이 충분합니까?

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

특히 @ejb의 'Beaninterface'속성을 구별하기 위해 단순히 별도의 로컬 및 원격 인터페이스를 만들지 않기로합니다.

도움이 되었습니까?

해결책

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

편집 : "EJB3 Spec Simplifified"의 섹션 3.2를 참조하십시오. http://jcp.org/aboutjava/communityprocess/final/jsr220/index.html

다른 팁

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

로컬 인터페이스의 jndi 이름을 @ejb 주석의 매개 변수로 사용하려고합니다.

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

위의 예에서는 인터페이스 이름에 로컬을 추가했습니다. 귀하의 경우에는 올바른 이름을 얻으려면 JNDI 컨텍스트를 살펴 봐야합니다.

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

public interface Queries () { .. }

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

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

이전 의견의 솔루션은 JBoss의 EJB 3.0과 완전히 호환되지 않습니다.

이 오류를 쉽게 얻을 수 있습니다.

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 () { ... }

효과가있다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top