我了解事务如何工作以及一切按预期运行,但我不喜欢访问连接以提交或回滚事务的方式。
我有 3 个服务类可以访问同一个单例连接对象。我想将这三件事包装在一个事务中,所以我这样做:
try {
$service1 = new ServiceOne;
$service2 = new ServiceTwo;
$service3 = new ServiceThree;
$service1->insertRec1($data);
$service2->deleteRec2($data);
$service3->updateRec3($data);
$service1->getSingletonConnection()->commit();
}
catch(Exception $ex) {
$service1->getSingletonConnection()->rollback();
}
getSingletonConnection 返回的连接对象只是 oci8 连接的包装器,提交是oci_commit
; 回滚是oci_rollback
。
正如我所说,这是因为它们都在访问同一个连接,但是通过任意服务对象访问连接感觉不对。此外,我的应用程序中使用了两个不同的数据库,因此我需要确保检索并提交正确的数据库……但不确定是否有任何解决方法。
有没有更好的方法来处理交易?