我按照规范中的规定遵循CMP的EJB标准,但它不会回滚数据库中的更改。当我注释掉Connection.close()
(从数据源检索Connection
)时,它会成功回滚。
是否建议WebLogic不要关闭从数据源接收的连接?
答案 0 :(得分:1)
是否建议WebLogic不要关闭从数据源接收的连接?
有一条规则,当在容器管理事务中时,您不应该调用任何手动或本机与事务资源上的事务交互的方法。
但是Connection.close()
不是这种方法。即使管理连接,当您从注入的数据源获取连接时,您确实必须关闭它。请注意,在大多数情况下,这实际上不会关闭连接,但是对于正在进行的事务,事务管理器很可能会保持连接处于保持状态,以便在整个事务提交时能够对其进行提交或回滚。回滚。
请注意,使用try-with-resources构造时,可以自动关闭连接。否则你确实需要调用close()
方法(包含在一些finally子句中)。
这是一个相当标准的模式:
@Stateless
public class MyEJB {
@Resource(lookup = "java:app/dataSource")
private DataSource dataSource;
public void doStuff() {
try (Connection connection = dataSource.getConnection()) {
// do work on connection
} catch (SQLException e) {
// handle exception
}
}
}
有关此主题的更多讨论,请参阅此链接:http://www.coderanch.com/t/485357/EJB-JEE/java/releasing-connection-CMT