Web services c3p0回滚事务而不是提交
我已经创建了一个Web services c3p0回滚事务而不是提交,web-services,postgresql,jetty,commit,c3p0,Web Services,Postgresql,Jetty,Commit,C3p0,我已经创建了一个ConnectionCustomizer,它在onCheckOut()中将autoCommit设置为false,将隔离级别设置为TRANSACTION\u REPEATABLE\u READ 当我在psotgresql数据库上执行CRUD操作,然后提交时,事务没有提交,我可以在pg_日志中看到回滚(见底部) 我已经读到c3p0的默认行为是在连接返回池时回滚任何未提交的事务。我如何才能真正提交我的事务 我已将此示例代码写入资源中进行测试: @GET @Path("/test") @
ConnectionCustomizer
,它在onCheckOut()中将autoCommit
设置为false
,将隔离级别设置为TRANSACTION\u REPEATABLE\u READ
当我在psotgresql数据库上执行CRUD操作,然后提交时,事务没有提交,我可以在pg_日志中看到回滚(见底部)
我已经读到c3p0的默认行为是在连接返回池时回滚任何未提交的事务。我如何才能真正提交我的事务
我已将此示例代码写入资源中进行测试:
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public Response test(@QueryParam("userId") long userId,
@HeaderParam("Accept-Language") String acceptLanguage) throws NamingException, SQLException {
InitialContext context = new InitialContext();
ComboPooledDataSource dataSource = (ComboPooledDataSource) context.lookup("jdbc/mydb");
SimpleJdbcInsert insertTest = new SimpleJdbcInsert(dataSource)
.withTableName("chat")
.usingGeneratedKeyColumns("idchat");
//BEGIN transaction
dataSource.getConnection().commit();
Map<String, Object> parameters = new HashMap<String, Object>(2);
parameters.put("idcompte", userId);
parameters.put("idvendeur", 148);
parameters.put("idannonce", 282);
parameters.put("creationdate", new Timestamp(Calendar.getInstance()
.getTime().getTime()));
parameters.put("lastmodified", new Timestamp(Calendar.getInstance()
.getTime().getTime()));
Map<String, Object> m = new HashMap<String, Object>();
m.put("idchat", insertTest.executeAndReturnKey(parameters));
//Commit transaction
dataSource.getConnection().commit();
return Response.ok(m, MediaType.APPLICATION_JSON).build();
}
但当我查看表时,该行没有插入,pg_log显示:
LOG: durée : 0.019 ms, analyse <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.005 ms, lien <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.006 ms exécute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.014 ms, lien S_1 : BEGIN
LOG: durée : 0.004 ms exécute S_1: BEGIN
LOG: durée : 0.222 ms, analyse <unnamed> : INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
LOG: durée : 0.075 ms, lien <unnamed> : INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
DÉTAIL: paramètres : $1 = '282', $2 = '226', $3 = '148', $4 = '2013-07-04 14:57:07.466', $5 = '2013-07-04 14:57:07.466'
LOG: durée : 1.027 ms exécute <unnamed>: INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
DÉTAIL: paramètres : $1 = '282', $2 = '226', $3 = '148', $4 = '2013-07-04 14:57:07.466', $5 = '2013-07-04 14:57:07.466'
LOG: durée : 0.012 ms, lien S_2 : ROLLBACK
LOG: durée : 0.030 ms exécute S_2: ROLLBACK
LOG: durée : 0.025 ms, analyse <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.004 ms, lien <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.006 ms exécute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG:durée:0.019 ms,分析:将会话特征设置为事务隔离级别可重复读取
日志:durée:0.005 ms,lien:将会话特征设置为事务隔离级别可重复读取
日志:durée:0.006 ms exécute:将会话特征设置为事务隔离级别可重复读取
日志:durée:0.014 ms,连S_1:开始
日志:durée:0.004毫秒exécute S_1:开始
日志:durée:0.222 ms,分析:插入聊天(IDannone、idcompte、IDvendur、creationdate、lastmodified)值($1、$2、$3、$4、$5),返回“idchat”
日志:durée:0.075 ms,lien:INSERT-INTO chat(IDannone、idcompte、IDvendur、creationdate、lastmodified)值($1、$2、$3、$4、$5)返回“idchat”
DÉTAIL:paramètres:$1='282',$2='226',$3='148',$4='2013-07-04 14:57:07.466',$5='2013-07-04 14:57:07.466'
日志:durée:1.027 ms exécute:插入聊天(idannonce、idcompte、IDvendur、creationdate、lastmodified)值($1、$2、$3、$4、$5),返回“idchat”
DÉTAIL:paramètres:$1='282',$2='226',$3='148',$4='2013-07-04 14:57:07.466',$5='2013-07-04 14:57:07.466'
日志:durée:0.012毫秒,连S_2:回滚
日志:durée:0.030毫秒exécute S_2:回滚
日志:durée:0.025 ms,分析:将会话特征设置为事务隔离级别可重复读取
日志:durée:0.004 ms,lien:将会话特征设置为事务隔离级别可重复读取
日志:durée:0.006 ms exécute:将会话特征设置为事务隔离级别可重复读取
您正在从数据源获取一个新连接,并对该连接调用commit()。那没用,因为你没有对新连接做任何工作。JDBC事务的作用域是每个连接。您需要在执行插入的连接上提交(),对插入的访问权隐藏在insertTest
对象的某个地方
(编辑,一个名为SimpleJdbcInsert
的类可能不是一个好主意。JDBC插入非常简单。如果您只是在这里完成这项工作,或者将其交给接受连接的辅助函数,您的代码会更干净。如果您处理的是数据源,SimpleJdbcInsert
负责获取连接、提交或回滚任何事务性工作以及关闭()连接的所有操作。如果该对象未能关闭()连接,则表示存在连接泄漏并将耗尽池。如果该对象在未提交的情况下关闭()连接,则您不应因工作被回滚而感到震惊。)
LOG: durée : 0.019 ms, analyse <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.005 ms, lien <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.006 ms exécute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.014 ms, lien S_1 : BEGIN
LOG: durée : 0.004 ms exécute S_1: BEGIN
LOG: durée : 0.222 ms, analyse <unnamed> : INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
LOG: durée : 0.075 ms, lien <unnamed> : INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
DÉTAIL: paramètres : $1 = '282', $2 = '226', $3 = '148', $4 = '2013-07-04 14:57:07.466', $5 = '2013-07-04 14:57:07.466'
LOG: durée : 1.027 ms exécute <unnamed>: INSERT INTO chat (idannonce, idcompte, idvendeur, creationdate, lastmodified) VALUES($1, $2, $3, $4, $5) RETURNING "idchat"
DÉTAIL: paramètres : $1 = '282', $2 = '226', $3 = '148', $4 = '2013-07-04 14:57:07.466', $5 = '2013-07-04 14:57:07.466'
LOG: durée : 0.012 ms, lien S_2 : ROLLBACK
LOG: durée : 0.030 ms exécute S_2: ROLLBACK
LOG: durée : 0.025 ms, analyse <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.004 ms, lien <unnamed> : SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
LOG: durée : 0.006 ms exécute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ