0

我正在尝试使用 MySQL 作为数据库的 WSO2 DataService 组件。我使用 WSO2 组件将 MySQL 数据库作为服务公开,并且能够使用 WSDL 生成 Java 代码。

使用 Java CXF 客户端,我能够连接到数据库并执行 CRUD 操作。我现在最关心的是 WSO2 DSS 组件如何处理脏数据。为了测试场景,我有以下代码:

public class TestService{

//Code to connect to service

private void callInsertOperation(HermesCompleteServicePortType port) {
        ((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        port.beginBoxcar();
        port.insertOperation("Key1", "TestData", Double.valueOf(0.00));
        try {
            port.endBoxcar(null);
        } catch (DataServiceFault e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Insert completed");
    }

    private void callUpdateOperation(HermesCompleteServicePortType port) {
        ((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        port.beginBoxcar();
        port.updateOperation("Key2", "TestData1", Double.valueOf(10.00));
        try {
            port.endBoxcar(null);
        } catch (DataServiceFault e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Update completed");
    }

}

当满足以下条件时,问题出在更新操作中:

  1. 更新在不存在的密钥上,即 Key2 不存在
  2. 更新旧数据,即密钥存在但数据已过时

在这两种情况下,我假设 DataService 指示更新操作失败/引发异常/不影响任何行。但它没有给出任何指示,我还检查了 wso2 日志以查看是否有任何与此相关的消息/异常,但没有出现。

显然,更新操作后 db 表保持不变。

WSO2 DSS 如何处理这些场景?客户端如何知道更新操作是否成功?我在代码中遗漏了什么吗?

编辑 我不想使用存储过程来检查结果行的计数,如此处所述

4

1 回答 1

2

显然,DSS 中没有这样的直接功能来识别更新操作是否影响了任何行。您指出的两种情况不会导致 SQLException。即使我们通过 mysql(数据库)命令提示符运行,这些操作也会作为正常的更新操作执行。但是它会显示结果为受影响的行= 0。在当前的 DSS 实现中,除了执行没有成功之外,我们不会向客户端返回失败消息,这里不是这种情况。

我们将把它作为一个新特性添加到 DSS 的未来版本中,它将在特定查询调用(如 INSERT/UPDATE)时返回“更新的行数”。

于 2013-02-01T10:32:51.200 回答