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