2013-10-04 5 views
2

우리는 매우 큰 엔터프라이즈 응용 프로그램을 개발할 계획이라고 생각하십시오. 그런 경우 다음을 위해 가장 좋은 방법이 무엇이되어야합니다.요청 당 또는 최대 사용자 당 최대 절전 세션 수?

a) 요청 당 최대 절전 세션 수 또는 사용자 당 최대 절전 세션 수?
b) 응용 프로그램에서 허용되는 트랜잭션 수?
c) 연결 풀링과 최대 절전 모드 세션 간의 관계?
d) 최대 절전 세션과 JTA 트랜잭션 간의 관계? e) 최대 절전 모드 세션 수는 성능을 감소 시킵니까? 그렇다면 이유는 무엇입니까

감사합니다.

답변

3

a) 요청 당. 더 확장 성이 뛰어나고 실제 JDBC 연결 풀링을 허용합니다.

b) 각 요청은 하나의 트랜잭션이됩니다. 이 트랜잭션은 다른 트랜잭션 리소스로 확장 될 수 있습니다. 이 경우 대부분 데이터베이스에 관심이 있습니다. 각 데이터베이스에 대해 세션이 생성됩니다 (데이터베이스가 특정 요청 내에서 액세스된다고 가정). 요청주기의 끝에서 모든 트랜잭션 자원이 확약되거나 없음 (2 단계 확약). 관리 환경 (응용 프로그램 서버)에서 트랜잭션 리소스는 액세스 될 때 현재 스레드에서 발생하는 트랜잭션에 암시 적으로 등록됩니다. 사용자 (응용 프로그램)는 JTA API를 사용하여 경계를 설정하기 위해이 트랜잭션과 상호 작용할 수 있습니다 (UserTransaction 참조).

c) 새로 생성 된 각 세션은 연결 풀에서 연결을받습니다. JTA 트랜잭션 당 각 데이터베이스

전자) 예를 가장 한 최대 절전 모드 세션에서

D). 나는 각 세션이 실제로 DB로 무엇인가를하기 위해 사용된다고 가정한다 (위의 요점 참조). 첫 번째 이유는 응용 프로그램 서버 및 데이터베이스 서버 자원 (CPU, 메모리, 네트워크)의 자연스러운 병목입니다. 두 번째 이유는 데이터베이스 잠금 (트랜잭션 범위)과 조금 간접적으로 사용되는 버전 잠금 체계 (대화 범위)입니다.

독립 실행 형 연결 풀/JTA 구현을 사용해야합니다. 한 가지 예는 XaPool을 사용한 JOTM입니다.그러나, Hibernate는 JOTM과 C3P0과 같은 것들과의 상호 작용을위한 API를 가지고 있습니다.

1

a) 단일 db의 경우 세션 팩토리를 하나만 만들 수 있으며 원하는 개수의 세션을 만들 수 있습니다.

b) 데이터베이스 (또는 시스템) 트랜잭션 경계가 항상 필요합니다. 데이타베이스 트랜잭션과는 별도로 데이타베이스와의 통신이 불가능합니다 (이것은 자동 커밋 모드에 익숙한 많은 개발자를 혼란스럽게합니다). 읽기 전용 작업 인 경우에도 항상 명확한 트랜잭션 경계를 사용하십시오. 격리 수준 및 데이터베이스 기능에 따라 필요하지 않을 수도 있지만 항상 트랜잭션을 명시 적으로 구분하면 단점은 없습니다. EXTENDED 지속성 컨텍스트에서 수정 사항을 유지해야하는 경우 트랜잭션 외부에서 작업을 수행해야합니다.

C) 최대 절전 모드 세션은 SQL을 직접 작성하지 않고 POJO를 저장할 수 있도록 Connection을 감싸는 래퍼입니다.

따라서 최대 절전 모드 세션은 Connection을 둘러싼 래퍼입니다. 연결은 연결 풀에 보관됩니다.

SessionFactory.openSession을 호출 할 때 hibernate는 먼저 제공된 연결 풀에서 Connection을 가져옵니다. 그런 다음 Connection을 중심으로 Session을 만들고 반환합니다.

관련 문제