我正在尝试使用 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");
}
}
当满足以下条件时,问题出在更新操作中:
- 更新在不存在的密钥上,即 Key2 不存在
- 更新旧数据,即密钥存在但数据已过时
在这两种情况下,我假设 DataService 指示更新操作失败/引发异常/不影响任何行。但它没有给出任何指示,我还检查了 wso2 日志以查看是否有任何与此相关的消息/异常,但没有出现。
显然,更新操作后 db 表保持不变。
WSO2 DSS 如何处理这些场景?客户端如何知道更新操作是否成功?我在代码中遗漏了什么吗?
编辑 我不想使用存储过程来检查结果行的计数,如此处所述