Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services c3p0回滚事务而不是提交_Web Services_Postgresql_Jetty_Commit_C3p0 - Fatal编程技术网

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