我正在为我的JPA事务使用标准的JPA事务管理器.但是,现在我想添加一些将共享相同"数据源"的JDBC实体.如何使用spring事务使JDBC操作具有事务性?我是否需要切换到JTA事务管理器?是否可以将JPA和JDBC事务服务与相同的数据源一起使用?更好的是,是否可以混合这两笔交易?
更新:@Espen:
我有一个从SimpleJdbcDaoSupport扩展的dao,它使用getSimpleJDBCTemplate.update插入数据库行.当从服务代码抛出RuntimeException时,事务在使用JPATransactionManager时永远不会回滚.它在使用DatasourceTransactionManager时会回滚.我试图调试JPATransactionManager,似乎它永远不会对底层的JDBCConnection执行回滚(我想这是因为数据源不一定是JPA的JDBC).我的配置设置与您在此处解释的完全相同.
这是我的测试代码:
<context:property-placeholder location="classpath:*.properties"/>
<!-- JPA EntityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceXmlLocation"
value="classpath:/persistence-test.xml" />
<property name="persistenceProvider">
<bean class="org.hibernate.ejb.HibernatePersistence" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!--
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
-->
<!-- Database connection pool -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.driverClassName}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
<property name="testOnBorrow" value="${database.testOnBorrow}" />
<property name="validationQuery" value="${database.validationQuery}" />
<property name="minIdle" value="${database.minIdle}" /> …Run Code Online (Sandbox Code Playgroud) 我的Web服务器使用通常的Java I/O和每个连接机制.如今,他们越来越user with用户(长轮询连接).但是,连接大多是空闲的.虽然这可以通过添加更多的Web服务器来解决,但我一直在尝试对NIO实现进行一些研究.
我对它有一个复杂的印象.我已经读过基准测试,其中Linux中新的NPTL库的常规I/O 优于NIO.
使用Java I/O配置和使用最新的NPTL for Linux有什么真实的体验?有没有提高性能?
在更大范围的问题上:
在标准服务器类机器(带有四核处理器的戴尔)中我们希望正常执行的最大I/O和阻塞线程数(我们在Tomcat线程池中配置)是多少(使用Linux NPTL库?).如果线程池变得非常大,比如超过1000个线程会有什么影响?
任何参考和指针将非常感谢.
我想尝试做以下事情:
list.foreach {x =>
x match {
case """TEST: .*""" => println( "TEST" )
case """OXF.*""" => println("XXX")
case _ => println("NO MATCHING")
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是使用它像groovy switch case正则表达式匹配.但我似乎无法编译.什么是scala中正确的方法?
当您想从代码中挤出最后一点性能时,您可能希望尽可能地利用JIT优化.例如,标记方法final为简单的方法内联,避免在关键位置的多态性等.
但我找不到任何java程序员可以用来"提示"JIT编译器以获得更快代码的参考或选项列表?难道我们不应该列出JIT的低延迟性能的"最佳编程"实践吗?
我正在尝试扩展SampleSync应用程序.安装应用程序后,我可以进入设置 - >帐户和同步 - >添加帐户以添加帐户.但是,如果我想从我的应用程序代码中检查并希望触发AccountManager直接添加新帐户,那么最佳方法是什么?