4

私たちのチームの Java EE プロジェクトでは Spring が使用され、基盤となる ORM には hibernate が使用されています。

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>

私の質問は設定全体を考え出したものです。休止状態のセッション ライフサイクルのプロパティ設定は見当たりませんでした。休止状態のリファレンスでは、コンテキスト セッションが導入され、CurrentSessionContext の 3 つの実装があると言われています。

  1. JTA 2.スレッド 3.マネージド

どの実装が使用されているかを知るにはどうすればよいですか。おそらくSpringによるものですが、わかりません。

4

2 に答える 2

3

SessionFactoryは、指定されたdataSourceを使用してSpringによって作成され、接続プールからDB接続を取得しています。SessionFactory.getCurrentSession()を介してHibernateセッションを取得します。次に、トランザクションを開始し、作業を実行してから、commit()またはrollback()を実行し、最後に接続を閉じます(接続オブジェクトはプールに返されます)。アプリケーションを停止するかサーバーをシャットダウンすると、Hibernateセッションファクトリが破棄/閉じられます。また、HibernateTransactionManagerを使用する場合、デフォルトでは、CurrentSessionContextのスレッド実装が使用されます。使用する場合は、jtaの実装:トランザクションマネージャーとして「JtaTransactionManager」を使用する必要があります。

于 2012-05-21T07:02:15.377 に答える
0

hibernate.current_session_context_class構成パラメーターは、どの実装org.hibernate.context.CurrentSessionContextを使用する必要があるかを定義します。下位互換性のために、この構成パラメーターが設定されていないが aorg.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

于 2012-05-22T13:07:41.723 に答える