12.2.2. SessionFactory setup in a Spring container
Spring 의 Application Context에 SessionFactory를 bean으로 등록해 둡니다.
다음은 Reference에 있는 XML 기반의 Hibernate 설정 파일을 사용할 때 등록하는 방법입니다.
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.HSQLDialect
</value>
</property>
</bean>
</beans>
다음은 찬욱이가 만들어 둔 어노테이션을 사용하는 Hibernate 설정을 사용했을 때의 SessionFactoryBean을 등록하는 예입니다. dataSource는 어딘가 다른 곳에 있습니다.
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>buyingBook.model.Member</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 지금 사용하고 있는 데이터베에스에 최적화 된 SQL을 생성하기 위해서
현재 데이터베이스에 해당하는 Hibernate dialect 클래스 명 -->
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!-- 콘솔 창에 사용하는 모든 SQL문을 출력할지를 선택 -->
<prop key="hibernate.show_sql">true</prop>
<!-- DB Schema에 변경사항이 발생한 경우 자동으로 수정 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 성능 튜닝에 도움이 되는 유용한 통계를 제공 -->
<prop key=" hibernate.generate_statistics">true</prop>
<!-- 자동 커밋이 되는 것을 방지 -->
<prop key="hibernate.connection.autocommit">false</prop>
<!-- "Current" Session의 Scope 설정.<jta/thread/managed/custom> -->
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
어플리케이션에서 "sessionFactory"로 빈을 룩업하면 SessionFactory type의 객체를 반환합니다. 빨간색 클래스들의 상위 클래스인 AbstractSessionFactoryBean 클래스의 코드 일부를 참조하면 알 수 있습니다.
만약에 사용하는 ORM이 바뀌면 여기서 설정파일만 바꿔주면 됩니다. 예를 들어 JNDI에 있는 DataSource를 사용할 거라면 다음과 같이 바꿔줍니다.
<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds"/>
</bean>
</beans>