Updated HibernateUtil
git-svn-id: https://svn.jboss.org/repos/hibernate/trunk/Hibernate3/doc@8293 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
b3f771dbb6
commit
03cf32cdec
|
@ -1508,14 +1508,14 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]></programlisting>
|
|||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="configuration-j2ee-currentsession" revision="1">
|
||||
<sect2 id="configuration-j2ee-currentsession" revision="2">
|
||||
<title>자동적인 JTA 및 Session 바인딩</title>
|
||||
|
||||
<para>
|
||||
관리되지 않는 환경들에서 우리는 static <literal>SessionFactory</literal>를 가진 <literal>HibernateUtil</literal>,
|
||||
그리고 Hibernate <literal>Session</literal>에 대한 <literal>ThreadLocal</literal> 관리를 제안했다. 몇몇 EJB들이
|
||||
동일 트랜잭션 내에서 실행되지만 동일 쓰레드 내에서 실행되지 않을 수 있으므로, 이 접근법은 EJB 환경에서 사용하기가 쉽지 않다. 우리는
|
||||
당신이 관리되는 환경에서 <literal>SessionFactory</literal>를 JNDI에 바인드 시키는 것을 권장한다.
|
||||
관리되는 환경들에서 우리는 <literal>SessionFactory</literal>를 JNDI에 바인드 시키는 것을 권장한다. 트랜잭션과
|
||||
<literal>Session</literal> 핸들링을 위해, 당신은 이미 소개된 <literal>HibernateUtil</literal> helper
|
||||
클래스를 사용할 수 있다. 하지만 EJB들은 동일한 쓰레드에서 실행되지 않을 수도 있는데, 그것은 항상 적절하게
|
||||
<literal>ThreadLocal</literal> 핸들링을 행하지 않는다(예를 들면 두 개의 세션이 서로를 호출할 때).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -1525,7 +1525,10 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]></programlisting>
|
|||
<literal>hibernate.transaction.flush_before_completion</literal>과
|
||||
<literal>hibernate.transaction.auto_close_session</literal> 구성 옵션 둘 다 당신이
|
||||
<literal>getCurrentSession()</literal>으로 검색하는 모든 <literal>Session</literal>에 대해 자동적으로 설정될
|
||||
것이고, 따라서 세션들은 또한 컨테이너가 JTA 트랜잭션들을 끝낼 때 자동적으로 flush되고 닫혀질 것이다.
|
||||
것이고, 따라서 세션들은 또한 컨테이너가 JTA 트랜잭션들을 끝낼 때 자동적으로 flush되고 닫혀질 것이다. 이것은
|
||||
<literal>ThreadLocal</literal> 관리에 대한 대안이다. 당신이 <emphasis>CaveatEmptor</emphasis> 어플리케이션에서
|
||||
찾을 수 있는 <literal>HibernateUtil</literal> 클래스는 실제로 두 개의 방도들 사이를 자동적으로 전환할 수 있으므로,
|
||||
transaction-local, BMT, 그리고 CMT 환경들 사이에서 당신의 코드를 이식가능하게 유지할 수 있다.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
|
|
@ -406,7 +406,7 @@ Indexes: cat_pkey primary key btree (cat_id)]]></programlisting>
|
|||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="quickstart-playingwithcats" revision="2">
|
||||
<sect1 id="quickstart-playingwithcats" revision="3">
|
||||
<title>cat들에 작업하기</title>
|
||||
|
||||
<para>
|
||||
|
@ -461,7 +461,7 @@ public class HibernateUtil {
|
|||
|
||||
public static final ThreadLocal session = new ThreadLocal();
|
||||
|
||||
public static Session currentSession() {
|
||||
public static Session getCurrentSession() {
|
||||
Session s = (Session) session.get();
|
||||
// Open a new Session, if this Thread has none yet
|
||||
if (s == null) {
|
||||
|
@ -494,7 +494,7 @@ public class HibernateUtil {
|
|||
예제는 다음과 같을 수 있다(예외상황 처리 없이):
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Session session = HibernateUtil.currentSession();
|
||||
<programlisting><![CDATA[Session session = HibernateUtil.getCurrentSession();
|
||||
Transaction tx = session.beginTransaction();
|
||||
|
||||
Cat princess = new Cat();
|
||||
|
@ -515,7 +515,7 @@ HibernateUtil.closeSession();]]></programlisting>
|
|||
</para>
|
||||
|
||||
<para>
|
||||
당신이 원하는 만큼 당신이 <literal>HibernateUtil.currentSession();</literal>을 호출할 수 있고, 당신은
|
||||
당신이 원하는 만큼 당신이 <literal>HibernateUtil.getCurrentSession();</literal>을 호출할 수 있고, 당신은
|
||||
이 쓰레드의 현재 <literal>Session</literal>을 항상 얻을 것임을 노트하라. 당신은 서블릿 코드 내에서든 또는 서블릿 필터
|
||||
내에서든 HTTP response가 전송되기 전에, 당신의 단위 작업이 완료된 후에 <literal>Session</literal>이 확실히
|
||||
닫혀지도록 해야 한다. 두 번째 옵션의 좋은 측면은 쉬운 lazy 초기화이다: 뷰가 렌더링 될 때 <literal>Session</literal>이
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
그리고 당신은 데이터베이스 트랜잭션 경계들을 어떻게 한정하는가?
|
||||
</para>
|
||||
|
||||
<sect2 id="transactions-basics-uow">
|
||||
<sect2 id="transactions-basics-uow" revision="1">
|
||||
<title>작업 단위</title>
|
||||
|
||||
<para>
|
||||
|
@ -77,10 +77,9 @@
|
|||
우리는 하나의 <literal>ThreadLocal</literal> 변수를 사용하여 그 <literal>Session</literal>을 요청에 서비스하는
|
||||
쓰레드에 바인드 시킬 것을 권장한다. 이것은 이 쓰레드 내에서 실행되는 모든 코드에서 (static 변수에 접근하는 것처럼) 쉽게
|
||||
접근을 허용해준다. 당신이 선택하는 데이터베이스 트랜잭션 경계 구분 메커니즘에 따라, 당신은 또한 <literal>ThreadLocal</literal>
|
||||
변수 내에 트랜잭션 컨텍스트를 유지할 수도 있다. 이것을 위한 구현 패턴들은<emphasis>ThreadLocal Session</emphasis>
|
||||
및 <emphasis> 뷰 내의 Open Session</emphasis>으로 알려져 있다. 당신은 이것을 구현하기 위해 이 문서의 앞 쪽에 보였던
|
||||
<literal>HibernateUtil</literal> helper 클래스를 쉽게 확장할 수 있다. 물론 당신은 당신의 환경에서 인터셉터를 구현하고 그것을
|
||||
설정하는 방법을 찾아야 한다. 팁들과 예제들은 Hibernate 웹 사이트를 보라.
|
||||
변수 내에 트랜잭션 컨텍스트를 유지할 수도 있다. 이를 위한 구현 패턴들은 <emphasis>ThreadLocal Session</emphasis> 및
|
||||
<emphasis>Open Session in View</emphasis>으로 알려져 있고 Hibernate Wiki 상에서 찾을 수 있다. 물론 당신은
|
||||
하나의 인터셉터를 구현하고 그것을 당신의 환경에 설정하는 방법을 찾아야 한다. 팁들과 예제들은 Hibernate 웹 사이트를 보라.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
|
Loading…
Reference in New Issue