2012-04-18 3 views
3

저는 EJB에 익숙하지 않고 최근에 EJB (3.0) 작업을 시작했습니다. Java를 6 년 동안 사용해 왔지만 이전에는 EJB를 사용하지 않았습니다. 나는 전체 EJB 비즈니스의 복잡성에 대해 말할 것도없이 압도적이다. 나는 개념의 일부를 실제로 적용 할 수있는 곳을 이해하지 못한다.Stateless Session Bean 대 Stateless Singleton

Stateless 세션 빈을 이해 한 후에 내게 떠오르는 질문 중 하나는 로컬 멤버가없는 클래스의 공유 인스턴스로 항상 상태 저장 세션빈을 대체 할 수는 없습니까? 무 상태 세션 빈에 대해 수행되는 인스턴스 풀링에 대해 읽었습니다. 상태가없는 경우 단순히 하나의 인스턴스 만 사용할 수 있습니까?

OpenEJB에 샘플을 배포하고 있으며 Stateless Session Bean을 사용해야하는 곳은 EntityManager와 상호 작용하는 것이 었습니다. 임의의 클래스에서 EntityManager를 처리 할 수 ​​있는지 잘 모르겠습니다. 그 외에도, 상태 비 저장 세션빈이 해결하려고하는 문제점을 여전히 의아하게 생각합니다.

+0

나는 이것이 논쟁의 여지가 있다고 생각하지만, 항상 EJB를 Spring과 같은 것으로 대체 할 수는 없으며 또한 엄청난 복잡성을 줄일 수 있을까? 내가 알아 낸 것은 필자가 작성한 것이 다른 일부 앱 서버와 같이 이식 가능한 것은 아니라는 점이다. 나는 Geronimo, TomEE, GlassFish 및 JBoss에서 JPA와 같은 Hibernate로 작업하는 간단한 Entity Bean을 얻으려면 다양한 문제에 부딪혔다. 별로 문제없이 JBoss와 함께 작동시킬 수 있습니다. 주로 WEB-INF/lib/ –

답변

10

상태 비 저장 세션 빈에는 상태가있을 수 있습니다. 하지만 대화 형 상태가 아닐 수도 있습니다. 그래서 세션 빈의 방법은 다음 (비록 나쁜 관행을)한다는 것을 완벽하게 허용 :

  • 의존성 주입
  • 선언 :

    풀링 게다가
    public void foo() { 
        this.someVar = bar(); 
        this.someOtherVar = baz(); 
        zing(); 
    } 
    

    , EJB 컨테이너는 비 저장 콩 여러 가지 서비스를 제공합니다 트랜잭션 경계 설정

  • 선언적 보안
  • EJB 컨텍스트에 대한 액세스

그래서 상태없는 세션 bean은 단순한 상태없는 싱글 톤보다 훨씬 유용합니다.

+0

에 패키지 된 Hibernate Jars를 로딩하는 것과 관련된 문제가있다. 하나의 일반적인 "임시 상태"는 삽입 된 EntityManager이며 "하나의 작업 단위"로만 사용해야합니다. – Puce

4

아니요, 상태 비 저장 세션빈은 상태를 가질 수 있지만 해당 상태는 세션에 유지/바인딩되지 않습니다. 이 상태의 일부는 주입 된 EJB 또는 상태가 좋은 bean 등이 될 수있는 다른 POJO입니다. 따라서 요청 당 상태 비 저장 세션빈이 필요합니다.

대조적으로 하나의 사용자 세션에 대해 예외적으로 상태 세션빈이 있으므로 상태가 세션에 바인딩됩니다.

0

임의의 클래스에서 EntityManager를 처리 할 수 ​​있지만 실제 문제는 솔루션을 설계하는 방법입니다.

EJB를 사용하는 EJB 복잡성을 제외하면보다 ​​확장 가능한 솔루션을 제공합니다.

앞에서 설명한 것처럼 EJB는 트랜잭션 기반 응용 프로그램을 개발할 때 유용합니다. 응용 프로그램 서버는 트랜잭션 관리, EJB 풀링, 보안 등의 기능을 제공합니다.

물론 "공유 클래스"를 사용하여 모든 것을 구현할 수 있지만 이미 모든 것을 무료로 사용할 때 왜 바퀴를 다시 발명하고 싶습니까?

무 상태 세션 콩은 비즈니스 로직을 응용 프로그램의 핵심 부분으로 구현하는 데 사용됩니다. Java EE 계층 아키텍처에서 다음과 같은 3 티어가 있습니다. 1. 프레젠테이션 2. 비즈니스 규모 3.데이터

EJB는 Businness 논리에서 중요한 역할을합니다. SLSB와 SFSB 두 가지 중에서 선택할 수 있습니다. 첫 번째 확장 성은 확장 성이 뛰어나 Application Server에서 풀링되지만 상태를 유지할 수는 없습니다. 둘째는 확장 성이 떨어지며 각 클라이언트 세션마다 하나의 SFSB가 있습니다. 예를 들어 SFSB에 대한 하나의 메소드 호출만으로는 완료 할 수없는 작업과 같이 클라이언트와 비즈니스 사이의 대화를 유지해야하는 경우에 사용됩니다. SLSB 및 SFSB는 SLSB 만 사용하여 지속성을 관리 할 것을 제안하더라도 EntityManager에 대한 참조를 보유하여 엔터티 영속성을 관리 할 수 ​​있습니다. EJB3 및 JPA는 훌륭한 솔루션입니다. 희망이 있으리라.

관련 문제