写java包装器

时间:2009-08-14 03:57:47

标签: java spring

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;
         }
     }
 }

1 个答案:

答案 0 :(得分:1)

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

在您的基类中放置:

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.的实现