我已经创建了一个设置ConnectionCustomizer
和autoCommit
隔离false
级别TRANSACTION_REPEATABLE_READ
onCheckOut()
当我在我的 psotgresql DB 上执行 CRUD 操作然后提交时,事务没有提交,我可以在 pg_log 中看到回滚(见底部)。
我读过 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();
}
此资源返回我自动生成的值:
{
idchat: 101
}
但是当我查看表格时,没有插入该行并且 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