Wso2数据服务 - 更新操作问题

时间:2013-01-28 20:05:22

标签: java mysql sql-update wso2 wso2dss

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

使用Java CXF Client,我可以连接到数据库并执行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. 更新旧数据,即密钥存在,但数据陈旧
  3. 在这两种情况下,我假设DataService指示更新操作失败/抛出异常/不影响任何行。但它没有给出任何指示,我也检查了wso2日志,看看是否有任何与此相关的消息/异常,但没有出现。

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

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

    修改 我不想使用存储过程检查结果行的计数here

1 个答案:

答案 0 :(得分:2)

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

我们将此添加为DSS未来版本的新功能,它将在INSERT / UPDATE等特定查询调用时返回“更新行数”。