2012-05-21 4 views
3

Spring используется в проекте Java EE нашей команды, а спящий режим используется для базового ORM.как весна управляет жизненным циклом сеанса гибернации

TransactionManager установлен, как показано ниже:

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
<property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

SessionFactory установлен, как показано ниже:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="packagesToScan" 
value="com.company.model" /> 
<property name="hibernateProperties"> 

<value> 
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect 
hibernate.show_sql=true 
hibernate.jdbc.fetch_size=50 
</value> 
</property> 
</bean> 

мой quesiton является thoughtout всей установки, я не вижу никакой собственности настройки для жизненного цикла Hibernate сессии . В справочной системе спящего режима были представлены контекстные сеансы, и было сказано, что существует три реализации CurrentSessionContext.

  1. JTA 2.Thread 3.Managed

Как я знаю, реализация которого была used.Maybe к весне, но я понятия не имею.

+1

чек здесь подобный вопрос http://stackoverflow.com/questions/8724259/spring-hibernate-session-lifecycle –

+0

Я прочитал этот пост вы предложили, но до сих пор не получил точный ответ , – Guanguan

ответ

3

SessionFactory создан Spring, используя данный источник данных и берет свои DB-соединения из пула соединений. Мы получаем сеанс Hibernate через SessionFactory.getCurrentSession(). затем запустите транзакцию, выполните работу, а затем commit() или rollback(), а в конце закройте соединение (объект подключения будет возвращен в пул). Заводская сессия Hibernate будет уничтожена/закрыта, когда мы либо остановим приложение, либо завершим работу сервера. И по умолчанию будут использоваться потоковые реализации CurrentSessionContext, если вы используете HibernateTransactionManager. Если вы хотите использовать jta-реализацию: вы должны использовать «JtaTransactionManager» в качестве менеджера транзакций.

+0

Это круто, один вопрос заключается в том, что вы сказали: «И по умолчанию будут использоваться потоковые реализации CurrentSessionContext, если вы используете HibernateTransactionManager». Но как я могу получить это из официальных документов? – Guanguan

0

Параметр конфигурации hibernate.current_session_context_class определяет, какой должна быть использована реализация org.hibernate.context.CurrentSessionContext. Для обратной совместимости, если этот параметр конфигурации не установлен, но настроен org.hibernate.transaction.TransactionManagerLookup, Hibernate будет использовать org.hibernate.context.JTASessionContext., который вы также можете настроить, установив свойство и используя короткую форму как «jpa».

Таким образом, вы используете 'jpa' - вы можете переопределить его, указав свойство типа.

<prop key="hibernate.current_session_context_class">managed</prop> 

Прочтите это, чтобы получить полную информацию о контекстных сеансах.

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html#architecture-current-session

Смежные вопросы