加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 01:30:18 所属栏目:大数据 来源:网络整理
导读:我正在运行包含以下组件的应用程序: 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(

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读