私はSpringで簡単なアプリケーションを書いています.Springアノテーションでdaosとサービスを定義し、hibernateをormとトランザクションマネージャーとして次のように定義しました:
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:env/hibernate.cfg.xml</value>
</property>
<property name="packagesToScan">
<list>
<value>com.skyfence.management.cm.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
ご覧のとおり、トランザクション管理に注釈を使用しています。この時点まではすべて正常に動作します。次に、Logger アスペクトを追加して、すべてのメソッドの前後に log4j の出力を追加したので、applicationContext.xml に以下を追加しました。
<aop:aspectj-autoproxy />
そして、新しい注釈付きアスペクト クラスを作成しました。
@Aspect
@Component
public class LoggingAspect
{
}
問題は、その時点から休止状態が機能しなくなり、次の例外が発生することです: org.hibernate.HibernateException: No Session found for current thread
どういうわけか、アスペクトを追加することでトランザクションが機能しなくなったのではないかと思いますが、解決方法がわかりません
どんな助けでも大歓迎です、