Gae*_*tan 6 spring hibernate jpa jta websphere-6.1
我正在运行包含以下组件的应用程序:
在从Web控制器到服务层的每个请求中(使用Spring的@Transactional注释),我注意到对于Hibernate在事务内部的服务调用期间执行的每个SQL查询,都会从jndi DataSource请求新的DataSource连接. Hibernate的ConnectionProvider,直到DataSource用完了空闲连接并最终挂起.
以下是配置的一部分:
弹簧:
<tx:annotation-driven />
<context:component-scan base-package="org.home.myapp" />
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/DS" resource-ref="true"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
<bean id="EMF" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)persistence.xml中
<persistence-unit name="persistence" transaction-type="JTA">
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect"/>
<property name="hibernate.current_session_context_class" value="jta"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.default_batch_fetch_size" value="20"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)服务
@Transactional(readOnly=true) @Service
public class MyServiceImpl implements MyService {
@Autowired MyDao dao;
public void getSomething() {
dao.findSomething();
}
}
Run Code Online (Sandbox Code Playgroud)DAO
@Repository
public class MyDaoJap implements MyDao {
@PersistenceContext EntityManager em;
public void findSomething() {
em.find(...);
}
}
Run Code Online (Sandbox Code Playgroud)请注意,事务是只读的,这对于流持久性来说是正常的:只有最后一次转换(使用commit = true)才会调用非readOnly事务方法.打开readOnly标志会自动将休眠刷新模式切换为MANUAL.
在做一些调试时,我注意到以下内容:
我想问题是在第二点,但我在配置中找不到错误.有人可以帮忙吗?
谢谢你的帮助.
我们的配置中的一些疯狂猜测
它甚至可能是内部的配置问题
| 归档时间: |
|
| 查看次数: |
4496 次 |
| 最近记录: |