2009-08-14 64 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