Google app engine 如何处理JDO应用程序引擎事务ConcurrentModificationException

Google app engine 如何处理JDO应用程序引擎事务ConcurrentModificationException,google-app-engine,google-cloud-datastore,jdo,Google App Engine,Google Cloud Datastore,Jdo,Documentation@解释了如何使用低级API处理DatastoreTimeoutException、ConcurrentModificationException或DatastoreFailureException,但是如果我使用JDO,如何处理它们?它们是直接抛出还是包装在JDO异常中?任何从JDO方法抛出的异常都是JDOEException(适当时使用嵌套异常)。通过阅读JDO规范,您可以轻松验证从JDO方法引发的任何异常是否为JDOEException(适当时使用嵌套异常)。您可以

Documentation@解释了如何使用低级API处理DatastoreTimeoutException、ConcurrentModificationException或DatastoreFailureException,但是如果我使用JDO,如何处理它们?它们是直接抛出还是包装在JDO异常中?

任何从JDO方法抛出的异常都是JDOEException(适当时使用嵌套异常)。通过阅读JDO规范,您可以轻松验证从JDO方法引发的任何异常是否为JDOEException(适当时使用嵌套异常)。您可以通过阅读JDO规范轻松验证…

我看到一些在第一个嵌套异常中检查异常,一些在2级嵌套异常中检查异常[getCause().getCause()],这也是令人困惑的,我如何知道这些异常的确切预期位置?Google的数据存储代码引发的根异常将包装在另一种类型的异常中,但您不应该假设将显示在什么级别。因此,在检查异常时,使用exception.getCause()循环原因列表正在查找ConcurrentModificaitoneException。顺便说一句,Google的Appengine文档说还应该重试DatastoreTimeoutException和DataStoreFailureException(这是一种罕见的情况,但仍有可能发生)。我看到一些在第一个嵌套异常中检查异常,一些在2级嵌套异常[getCause().getCause()],这也令人困惑,我如何知道这些异常的确切预期位置?Google的数据存储代码引发的根异常将被包装在另一种异常中,但您不应该假设将显示在什么级别。因此,在检查异常时,使用exception.getCause()循环原因列表正在查找ConcurrentModificaitoneException。顺便说一下,Google的Appengine文档表示,还应该重试DatastoreTimeoutException和DataStoreFailureException(这是一种罕见的情况,但仍然可能发生)。