1.这就是我的dao类的样子,其中事务代码对每个方法都重复。可以将这些代码片段放在超类中,这样我就不需要一直重复下面的代码?有没有详细说明该如何做?

2.是否需要将代码段放入super.class中。 super.class应该是静态的吗?

 for (int i = 0; i < NUM_RETRIES; i++) {
     pm.currentTransaction().begin();

     <all my code will be here>

     try {
         pm.currentTransaction().commit();
         break;

     } catch (JDOCanRetryException ex) {
         if (i == (NUM_RETRIES - 1)) {
             throw ex;
         }
     }
 }

最佳答案

仅解决“提取超类”问题,您可以:

在您的基类中:

public abstract Object doTransaction();

public abstract Object executeTransaction(some params){
for (int i = 0; i < NUM_RETRIES; i++) {
     pm.currentTransaction().begin();

     this.doTransaction();

     try {
         pm.currentTransaction().commit();
         break;

     } catch (JDOCanRetryException ex) {
         if (i == (NUM_RETRIES - 1)) {
             throw ex;
         }
     }
 }
}


在派生类中,重新定义doTransaction方法

public Object doTransaction() {

 //access database and stuff;
}


请相应地调整返回类型和参数。

注意,没有什么静态的(静态方法不能被覆盖),它只是template method pattern.的实现。

10-08 16:06