我正在尝试使用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");
}
}
当满足以下条件时,问题出在更新操作中:
在这两种情况下,我假设DataService指示更新操作失败/抛出异常/不影响任何行。但它没有给出任何指示,我也检查了wso2日志,看看是否有任何与此相关的消息/异常,但没有出现。
显然,更新操作后db表保持不变。
WSO2 DSS如何处理这些情况?客户如何知道更新操作是否成功? 我在代码中遗漏了什么吗?
修改 我不想使用存储过程检查结果行的计数here
答案 0 :(得分:2)
显然,DSS中没有这样的直接功能来识别更新操作是否影响任何行。您指出的两个方案不会导致SQLException。即使我们运行mysql(数据库)命令提示符,它们也将作为正常的更新操作执行。但它会显示结果为受影响的行= 0.对于DSS的当前实现,除了执行没有成功之外,我们不会向客户端返回失败消息,这不是这里的情况。
我们将此添加为DSS未来版本的新功能,它将在INSERT / UPDATE等特定查询调用时返回“更新行数”。