무국적 세션 콩을 Pojos로 변환하는 확장 성 영향
-
20-09-2019 - |
문제
EJB 2.1 SLSB로 구현 된 심하게 사용되는 서비스 객체를 상상해보십시오. 또한 상태가 없기 때문에 그 자체로는 스레드-안전한 것으로 생각됩니다. 모든 공개 방법은 거래 (CMT를 통해)이며 대부분은 단순히 거래가 필요하지만 일부는 새로운 거래가 필요합니다.
이 SLSB를 진정한 싱글 톤 포조 (예 : DI 프레임 워크 사용)로 변환하면 응용 프로그램의 확장 성에 어떤 영향을 미칩니 까? 서비스가 SLSB 일 때, EJB 컨테이너는 각 클라이언트가 자체 사본을 얻을 수있는 인스턴스 풀을 관리 할 것이므로 싱글 톤 Pojo로 전환하는 것이 단일 인스턴스에 대해 어떤 종류의 경합을 소개 할 것인지 궁금합니다.
FWIW,이 서비스의 방법 중 어느 것도 없습니다 synchronized
.
설명 : SLSB를 Pojo로 변환하려는 나의 동기는 객체의 수명주기 (True Singleton vs Container-Managed)와 코드 자체 (하나의 인터페이스 및 1 개의 주석화 된 pojo, 3 개의 인터페이스, 1 개의 Bean 클래스 및 묶음의 단순성입니다. ejb-jar.xml에서 xml).
또한 FWIW, 해당 서비스는 JBoss 3.X에서 실행되는 종료 된 웹 앱의 구성 요소 중 하나입니다.
해결책
Pojo가 진정으로 무국적 상태이거나 대화 상태가 없다면 (즉, 상태가 불변) 성능이 악화되지 않으며 컨테이너의 수영장이 아닌 DI 프레임 워크에서 한 인스턴스를 실제로 사용하고 있기 때문에 약간 개선 할 수도 있습니다. . (수영장조차도 높은 하중 하에서 경합으로 고통 받고 있습니다.)
디자인별로 스레드-안전한 객체에 동기화가 필요하지 않습니다. 경합이 없을 것입니다. 스레드는 동기화없이 POJO에서 메소드를 자유롭게 실행할 수 있습니다.
Pojo 만 사용하면 앱에서 무슨 일이 일어나고 있는지 알 수 있으며 무대 뒤에서 진행되는 숨겨진 "컨테이너 매직"이 없을 수 있습니다.
다른 팁
당신의 pojo는 완벽 해 보입니다.
따라서 아니요, 경합이 없을 것입니다. 확장 성은 완벽 할 것입니다.
- 추가 비용이 없습니다.
- 몇 가지 대신 하나의 인스턴스가 있기 때문에 더 적습니다.
- 수영장의 한계에 도달하지 않기 때문에 확장 성이 더 좋습니다 (가지고 있지 않음).