我正在运行包含以下组件的应用程序:
> Oracle 9i
>带有WS和EJB3功能包的WAS 6.1.0.23
> JPA与Hibernate 3.3.2.GA作为提供者(使用Hibernate-EntityManager 3.4.0)
> WAS的Spring事务管理器:UowTransactionManager(spring 2.5.6)
>具有流管理持久性的Spring Webflow(2.0.8),即实体管理器被序列化为http会话,并在每个请求上恢复.
在从Web控制器到服务层的每个请求中(使用Spring的@Transactional注释),我注意到对于Hibernate在事务内部的服务调用期间执行的每个SQL查询,都会从jndi DataSource请求新的DataSource连接. Hibernate的ConnectionProvider,直到DataSource用完了空闲连接并最终挂起.
以下是配置的一部分:
>春天:
> persistence.xml
>服务
@Transactional(readOnly=true) @Service
public class MyServiceImpl implements MyService {
@Autowired MyDao dao;
public void getSomething() {
dao.findSomething();
}
}
> DAO
@Repository
public class MyDaoJap implements MyDao {
@PersistenceContext EntityManager em;
public void findSomething() {
em.find(...);
}
}
请注意,事务是只读的,这对于流持久性来说是正常的:只有最后一次转换(使用commit = true)才会调用非readOnly事务方法.打开readOnly标志会自动将休眠刷新模式切换为MANUAL.
在做一些调试时,我注意到以下内容:
>在服务的拦截链中正确调用UOW事务管理器,这表明事务处于活动状态
> Hibernate通过在注入EMF的原始DataSource上调用DataSource.getConnection()来请求连接;获取连接的策略来自Hibernate的InjectedDataSourceConnectionProvider,此类引用WAS DataSource(不是知道活动事务的代理等).
我想问题是在第二点,但我在配置中找不到错误.有人可以帮忙吗?
谢谢你的帮助.
> hibernate prop – hibernate.connection.release_mode = after_statement
> web.xml资源参考数据源配置 – < res-sharing-scope>可共享< / res-sharing-scope>
> spring sessionFactory config – useTransactionAwareDataSource =“true”
它甚至可能是内部的配置问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。