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;
}
}
}
答案 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.的实现