WAS 6.1,JPA与JTA,Hibernate,Spring:数据检索问题

前端之家收集整理的这篇文章主要介绍了WAS 6.1,JPA与JTA,Hibernate,Spring:数据检索问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在运行包含以下组件的应用程序:

> 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用完了空闲连接并最终挂起.

以下是配置的一部分:

>春天:

factorybean">
  

> persistence.xml

sql" value="true"/>
    sql" value="true"/>
    

>服务

@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”

它甚至可能是内部的配置问题

猜你在找的Spring相关文章