2

EJB 2.1 SLSB로 구현되는 많이 사용되는 서비스 객체를 상상해보십시오. 또한 상태가 전혀 없으므로 스레드 안전성이 보장됩니다. 모든 공개 메소드는 트랜잭션 (CMT를 통해)이며, 가장 간단하게 트랜잭션을 필요로하지만 일부는 새 트랜잭션을 필요로합니다.무 상태 세션 빈을 POJO로 변환 할 때의 확장 성의 영향

이 SLSB를 진정한 싱글 톤 POJO (예 : DI 프레임 워크 사용)로 변환하면 응용 프로그램의 확장성에 어떤 영향을 줍니까? 서비스가 SLSB 인 경우 EJB 컨테이너는 각 클라이언트가 자체 복사본을 얻을 인스턴스 풀을 관리하므로 단일 POJO로 변환하면 단일 인스턴스에 대해 어떤 종류의 경합이 발생하는지 궁금합니다.

FWIW,이 서비스 방법 중 어느 것도 synchronized입니다.

설명 : SLSB를 POJO로 변환하려는 동기는 객체의 수명주기 (true singleton 대 컨테이너 관리)와 코드 자체 (코드 하나의 인터페이스와 주석이 달린 POJO, , ejb-jar.xml에 XML 묶음이있다.

또한 해당 서비스 인 FWIW는 JBoss 3.x에서 실행되는 배치 된 웹 응용 프로그램의 구성 요소 중 하나입니다.

+0

이 답변 : http://stackoverflow.com/questions/134791/why-pool-stateless-session-beans/135840#135840 "많은 경합과 차단"이있을 것이라고 주장하지만, 아무런 증거도 없습니다. , 또는 심지어 그 진술의 최대 - 투표, 그래서 나는 그것을 (Mwanji 의도에 대한 공격) 그것을 줄 어떤 무게 몰라요. –

+0

환경에 대해 자세히 설명해 주시겠습니까? 여전히 Java EE 서버를 사용하고 있습니까? 하나의 상자 또는 여러 상자로 운영되고 있습니까? 1 상자 당 몇 개의 코어가 있습니까? 그리고 왜 다른 스레드에서 작동하는 것과는 달리 싱글 톤 POJO가 필요합니까? –

+0

@ 짐 : 질문을 업데이트했습니다. 그러나 귀하의 의견은 싱글 톤이 여러 스레드를 처리 할 수 ​​없다는 것을 암시하는 것으로 보입니다 - 실제로 이것이 사실입니까? 이것은 내 질문의 핵심에 도달한다. 하나의 POJO를 사용하여 확장 성 용어를 풀링 된 SLSB와 비교하는 방법은 무엇입니까? 다른 스레드가 끝날 때까지 POJO를 사용하기 위해 대기해야하는 스레드가 있습니까? –

답변

3

POJO가 실제로 상태 비 저장이거나 대화 가능 상태가 아닌 경우 (즉, 상태가 변경되지 않음) 성능이 악화되지 않으며 DI 프레임 워크의 인스턴스 하나만 사용하기 때문에 약간 향상 될 수 있습니다. 컨테이너의 풀보다 (풀이 고부하에서 경쟁을 겪는다.)

none 또는 불변의 상태가있는 것과 같이 디자인 상 thread로부터 안전한 개체에는 동기화가 필요하지 않습니다. 논쟁은 없을 것입니다 - 스레드는 동기화없이 POJO에서 메소드를 자유롭게 실행할 수 있습니다.

POJO 만 사용하면 앱에서 실제로 무엇이 일어나는지 볼 수 있으며 숨겨진 '컨테이너 마법'이 뒤에서 일어날 수 있습니다.

1

POJO가 완벽 해 보입니다.

아니요, 논쟁은 없으며 확장 성은 완벽 할 것입니다.

  • 추가 비용이 들지 않습니다.
  • 여러 인스턴스 대신 하나의 인스턴스가 있으므로 사용자 수가 적습니다.
  • 풀의 한도에 결코 부딪치지 않기 때문에 확장 성이 향상됩니다.
관련 문제