[hibernate-commits] Hibernate SVN: r11242 - trunk/Hibernate3/doc/reference/ko/modules.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sun Feb 25 00:35:21 EST 2007


Author: jdkim528
Date: 2007-02-25 00:35:21 -0500 (Sun, 25 Feb 2007)
New Revision: 11242

Modified:
   trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml
Log:
Added warnings about session-per-operation anti-pattern

Modified: trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml
===================================================================
--- trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml	2007-02-25 05:34:40 UTC (rev 11241)
+++ trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml	2007-02-25 05:35:21 UTC (rev 11242)
@@ -562,7 +562,7 @@
 
         </sect2>
 
-        <sect2 id="tutorial-firstapp-workingpersistence" revision="4">
+        <sect2 id="tutorial-firstapp-workingpersistence" revision="5">
             <title>객체 로딩과 객체 저장</title>
 
             <para>
@@ -622,21 +622,40 @@
             </para>
 
             <para>
+                
                 <literal>sessionFactory.getCurrentSession()</literal>은 무엇을 행하는가? 먼저 
                                 당신은 당신이 (<literal>HibernateUtil</literal> 덕분에 쉽게) <literal>SessionFactory</literal>을 
                                 당신이 소유하고 있다면, 원하는 만큼 어디서든 여러번 그것을 호출할 수 있다. 
                 <literal>getCurrentSession()</literal> 메소드는 항상 "현재의" 작업 단위를 반환한다. 우리가 
                 <literal>hibernate.cfg.xml</literal> 내에서 이 매커니즘에 대한 구성 옵션을 "thread"로 전환시켰음을 기억하는가?
-                                그러므로 현재 작업 단위의 영역은 우리의 어플리케이션을 실행시키는 현재의 Java 쓰레드이다. 하지만 이것은 
-                                전부가 진실은 아니다. 그것이 처음으로 필요로 되고, <literal>getCurrentSession()</literal>을 첫번째로 
-                                호출할 때 <literal>Session</literal>이 시작된다. 그때 현째의 쓰레드에 대해 Hibernate에 의해 바인드 된다. 
-                                트랜잭션이 종료될 때 커밋 되거나 롤백되고, Hibernate는 또한 쓰레드로부터 <literal>Session</literal>을 
-                                바인드 해제시키고 당신을 위해 그것을 닫는다. 만일 당신이 <literal>getCurrentSession()</literal>을 다시 
-                                호출한다면, 당신은  새로운 <literal>Session</literal>을 얻고 새로운 작업단위를 시작할 수 있다. 이 
-                <emphasis>thread-bound</emphasis> 프로그래밍 모형은 Hibernate를 사용하는 가장 대중적인 방법이다.
+                 그러므로 작업의 현재 단위는 우리의 어플리케이션을 실행시키는 현재 자바 쓰레드에 묶여 있다. 하지만 
+                 이것은 전체 그림이 아니며, 당신은 또한 scope(영역), 작업 단위가 시작될 때와 작업 단위가 종료될 때를 
+                 고려해야 한다.
             </para>
 
             <para>
+                <literal>Session</literal>은 그것이 처음으로 필요로 되고 <literal>getCurrentSession()</literal>에 대한 
+                첫 번째 호출이 이루어질 때 시작된다. 그때 그것은 Hibernate에 의해 현재의 쓰레드에 바인드 된다. 
+                커밋되든 롤백되든 간에 트랜잭션이 종료되고, Hibernate가 자동적으로 그 쓰레드로부터 <literal>Session</literal>을 
+                 바인드 해제시키고 당신을 위해 세션을 닫는다. 만일 당신이 <literal>getCurrentSession()</literal>을 다시 
+                 호출한다면, 당신은  새로운 <literal>Session</literal>을 얻고 새로운 작업단위를 시작할 수 있다. 
+                 이 <emphasis>thread-bound</emphasis> 프로그래밍 모형은 Hibernate를 사용하는 가장 대중적인 방법이다. 
+                 왜냐하면 그것은 당신의 코드를 유연하게 계층화시키는 것을 허용해주기 때문이다(트랜잭션 경계 분할 코드는 
+                 데이트 접근 코드와 구별지워질 수 있는데, 우리는 이 튜토리얼의 뒷부분에서 이것을 다룰 것이다.).
+            </para>
+
+            <para>
+                작업 영역의 단위와 관련하여, Hibernate <literal>Session</literal>은 하나 또는 여러 개의 데이터베이스 
+                오퍼레이션들을 실행시키는데 사용될 수 있는가? 위의 예제는 하나의 오퍼레이션에 한 개의 <literal>Session</literal>을 
+                사용하고 있다. 이것은 순진한 일치이며, 예제는 어떤 다른 접근법을 보여주기에는 충분히 복잡하지 않다. 
+                Hibernate <literal>Session</literal>의 scope(영역)은 유연하지만 당신은 결코 <emphasis>모든</emphasis> 
+                데이터베이스 오퍼레이션 각각에 대해 새로운 Hibernate <literal>Session</literal>을 사용하도록 
+                당신의 어플리케이션을 설계할 수 없다. 따라서 심지어 당신이 다음의 (매우 사소한) 예제들에서 여러 번 
+                그것을 볼 수 있을지라도 <emphasis>session-per-operation</emphasis>을 하나의 안티-패턴으로 간주하라. 
+                실제 (웹) 어플리케이션은 이 튜토리얼의 뒷부분에 보여진다.
+            </para>
+
+            <para>
                                 트랜잭션 핸들링과 경계구분에 대한 추가 정보는 <xref linkend="transactions"/>을 살펴보라. 
                                 우리는 또한 앞의 예제에서 임의의 오류 처리와 롤백을 생략했다.
             </para>
@@ -1201,7 +1220,7 @@
                         그것은 새로운 이벤트들을 입력하기 위한 HTML form을 제공한다.
         </para>
 
-        <sect2 id="tutorial-webapp-servlet" revision="1">
+        <sect2 id="tutorial-webapp-servlet" revision="2">
             <title>기본 서블릿 작성하기</title>
 
             <para>
@@ -1257,6 +1276,12 @@
                                 사용하지 않는다).
             </para>
 
+           <para>
+                모든 데이터베이스 오퍼레이션 각각에 대해 새로운 Hibernate <literal>Session</literal>을 사용하지 <emphasis>말라</emphasis>.
+                전체 요청에 대해 영역지워진 한 개의 Hibernate <literal>Session</literal>을 사용하라. 그것이 자동적으로 현재의 자바 쓰레드에 바인드되도록 
+                <literal>getCurrentSession()</literal>을 사용하라.
+            </para>
+
             <para>
                                 다음으로, 요청의 가능한 액션들이 처리되고 응답 HTML이 렌더링된다. 우리는 곧장 그부분으로 갈 것이다.
             </para>




More information about the hibernate-commits mailing list