2012-01-29 4 views
7

지금까지는 거의 인터페이스가없는 EJB로 작업하고 @Local 주석이 필요한지 약간만 이해했습니다.EJB 3.1. @Local 주석이 필요합니까?

public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

MyBeanIntf@Local으로 표시해야이 예를 생각해?

@Named 
@SessionScoped 
public class TestController implements Serializable { 

    // injection works perfectly, even when MyBeanIntf is not marked as @Local 
    @Inject 
    private MyBeanIntf myBean; 

    // or even like this: 
    // @EJB 
    // private MyBeanIntf myBean; 

} 

은 이제 더 복잡 만들어 보자 : 나는 @Local로 주석을하지 않는 경우에도, 나는 아직도 제대로 UI 컨트롤러에 주입하는을 DI를 사용할 수 있기 때문에 나는 그에서 어떤 혜택을 볼 수 없습니다 :

public interface MyBeanIntf { void doStuff(); } 
public class MySuperBean implements MyBeanIntf { public void doStuff() { } } 

@Stateless 
public class MyBean extends MySuperBean { } 

이제 유효한 Local EJB 콩 간주 MyBean 있습니까? 간접적으로 인터페이스를 구현하기 때문에 몇 가지 의구심이 있습니다.

답변

8

EJB가 일부 인터페이스를 구현하지만 사용자가 (@Remote, @Local) 어떤 인터페이스를 지정하지 않으면 (@ 리모트, @Local) @Local 인 것으로 가정합니다. 따라서

코드 :

public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

은 다음과 의미 적으로 동일하다 :

@Local 
public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

이 질문의 두 번째 부분에 관해서, 내가 생각하는 그 부분 4.9.2.1 세션 빈 EJB 3.1 FR 스펙의 수퍼 클래스이 흥미로울 것입니다. 푸와 바 가정

@Stateless 
public class A implements Foo { ... } 

@Stateless 
public class B extends A implements Bar { ... } 

이 지역 비즈니스 인터페이스입니다 (이 정확하지 않을 수 있도록) 나의 이해에서, 당신의 빈은 다음 이유로 인해 발췌의 유효한 로컬 인터페이스를 노출하는 것으로 간주되어서는 안 보인다 관련 배포 설명자가 없으면 세션 빈 A는 로컬 비즈니스 인터페이스 Foo를 노출하고 세션 빈 B는 로컬 비즈니스 인터페이스 모음을 표시하지만 Foo은 표시하지 않습니다.

세션 빈 B는 명시 적으로 해당 인터페이스가 적용될 노출 세트 집합에 Foo를 포함시켜야합니다.

업데이트 : 하나 더 발췌 사양에서 추가로

:

세션 빈 클래스가 스스로 세션 빈 클래스는 슈퍼 클래스가 허용된다. 그러나 주석 처리 또는이 경우의 배포 설명자 에 적용되는 특별한 규칙은 없습니다. 특정 세션 Bean 클래스를 처리하기 위해 수퍼 클래스가 세션 Bean 클래스인지 여부에 관계없이 모든 수퍼 클래스 처리는 동일합니다 ( ).

+0

답변 해 주셔서 감사합니다. 사양에 대한 링크에 관해서는, 나는 여전히 몇 가지 의구심이 있습니다. 명시 적으로 세션 bean 인 superclasses에 대해 설명합니다. 그러나'@ Stateless' 또는'@ Stateful' 주석이없는 추상 클래스 일 경우 어떻게해야할까요? – jFrenetic

+0

물론, 나는 그것에 대해 100 % 확신 할 수는 없지만 편집 된 게시물을 살펴보십시오. 아마도 도움이 될 것입니다. –

+1

강조 해 주셔서 감사합니다. 나는 그 부분을 나 자신으로 읽었지만 어떻게 든 그것을 놓쳤다. – jFrenetic