2009-08-14 66 views
2

1.这是我的dao类看起来像事务代码保持每个方法重复的地方。可能把这些片段代码放在超类中,这样我就不需要一直重复下面的代码了?任何详细的如何做到这一点?
2.如果需要将代码片段放在super.class中。超级类应该是静态的吗?写java包装

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

的实现,因此,让我得到这个直 - 你**重复相同的代码**在一个循环多次假设一次失败的交易下次会成功?他们有一个名称:http://www.quotationspage.com/quote/26032.html – ChssPly76 2009-08-14 04:03:25

回答

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

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

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

+0

示例在道,我有方法公开名单 getSomething(){ //如何调用基类的doTransaction? } – cometta 2009-08-14 04:11:27

+0

如果您需要显式调用您的基类(来自派生实例)的getSOmething()方法,只需执行super.getSomething() – Tom 2009-08-14 04:20:56

+0

tom可以更详细地解释我如何将它放入dao。我的dao扩展了基类? – cometta 2009-08-14 04:21:48