0

NHibernate 세션을 ThreadLocal에 저장하는 것이 이치에 맞다. Thread Safe가 될 것이라고 가정하는 것이 안전하고 세션의 지연로드 문제를 해결할 수 있는가? 또한 스레드가 실행되는 동안에는 Session을 사용할 수 있다고 가정하는 것이 안전할까요? 스레드의 측면에서 나는 HttpRequet에 대해 이야기하고있다.ThreadLocal을 가진 쓰레드 당 NHibernate 세션

또한 NHibernate에 대한 세션이 부족합니까? 최대 세션 수가 있습니까? 스레드가 많으면 괜찮을까요?

+0

이 '스레드 안전성'이란 무엇을 의미하며 세션의 지연로드 문제를 해결할 수 있습니까? 게으른 로딩 문제로 – Rippo

+0

을 사용하면보기에서 지연 로딩을 위해 매핑 된 객체를 참조하면 세션이 닫히는 예외가 발생합니다. 패턴보기. 스레드 안전, 스레드 당 세션을 얻을 수 있습니까? 경쟁 조건이 발생하지 않습니다. – DarthVader

+0

나는 항상 세션 팩토리가 스레드 안전하다고 믿도록 유도되었지만 세션은 나중에 ThreadLocal을 사용하면 나중에 물지 않을 것입니다. – Rippo

답변

2

NHibernate 세션은 스레드로부터 안전하지 않습니다. ok로 작동해야하는 하나의 세션과 단일 세션을 연결해야합니다.

요청할 때마다 세션이 열려 있고 요청이 끝날 때 닫히는 요청 당 구현을 사용하는 가장 좋은 방법은 http 요청입니다. 이 경우 스레드가 실행되는 동안 세션을 사용할 수 있다고 가정하는 것이 안전합니다.

일반적으로 NHibernate는 세션을 다 소비하지 않지만 가능한 가장 짧은 수명의 세션을 사용하는 것이 더 좋습니다.

+0

은 의미가 있으며 연결이 끊어 지거나 연결이 끊어 질 수도 있습니다. – DarthVader

+0

@DarthVader : 세션! = 연결. 임의의 양의 nh 세션 객체 (시스템의 메모리로만 제한됨)를 가질 수 있습니다. http://ayende.com/blog/4123/what-is-the-cost-of-opening-a-session. – Andreas