情况如下:1应用程序更新触发2件事:
目标情况是:每当上述任何步骤失败时,一切都应该回滚。应用程序代码在Scala中,作为独立应用程序运行(没有应用程序服务器)。
解决这个问题的方法应该是什么? JTA?如果是这样,你知道任何接近上述情况的例子吗?
提前致谢! 罗尔夫
答案 0 :(得分:1)
您可以实现所需的回滚功能,但是您无法实现原子性。 如果你不介意,请点击下面的伪代码:
// your db connection should have autocommit=off at this point
try {
preparedStatement.executeQuery(...);
indexWriter1.addDocument(...);
indexWriter2.addDocument(...);
indexWriter1.prepareCommit();
indexWriter2.prepareCommit();
// at this point, chances of Lucene failing are pretty slim
// the only thing left for Lucene now is to rename the segments file
dbConnection.commit();
// if the DB connection commit fails, rollback Lucene writers below
indexWriter1.commit();
indexWriter2.commit();
} catch (Throwable t) {
indexWriter1.rollback();
indexWriter2.rollback();
dbConnection.rollback();
}
有关Lucene处理提交结束的更多详细信息,请参阅this thread。