2010-04-25 114 views
1

我有一些像這樣的代碼:Google App Engine PersistenceManager可以處理多個對象嗎?

 PersistenceManager pm=PMF.get().getPersistenceManager(); 
     String query="select from "+PayPal_Message.class.getName()+" where processed == false order by time desc"; 
     List<PayPal_Message> messages=(List<PayPal_Message>)pm.newQuery(query).execute(); 
     if (messages.isEmpty()) 
     { 
     } 
     else 
     { 
      for (PayPal_Message g : messages) 
      { 
      Contact_Info_Entry A_Contact_Entry=Process_PayPal_Message_To_Get_A_License(g.getContent().getValue()); 
      pm=PMF.get().getPersistenceManager(); 
      try 
      { 
       pm.makePersistent(A_Contact_Entry); 
       g.setProcessed(true); 
       pm.makePersistent(g); 
      } 
      catch (Exception e) 
      { 
       Send_Email(Email_From,"[email protected]","Servlet Error Message [ "+time+" ]",new Text(e.toString())); 
      } 
//   finally { pm.close(); } 

      } 
     } 
     pm.close(); 

我不知道它是確定以使用上述下午收盤前處理多個對象。或者我必須得到並關閉下午才能處理每個對象?

+0

你的代碼是否工作?看看你做了多少次pm = PMF.get()。getPersistenceManager()vs你做了多少次pm.close(); 你爲什麼評論一個? – 2010-04-25 02:10:07

+0

我還沒有嘗試過,因爲我不知道我是否以正確的方式做,謝謝! – Frank 2010-04-25 14:09:26

回答

0
  • PersistentManagerFactory會在你每次請求它的時候給你一個新的PersistenceManager。
  • 如果應用程序不處理太多的請求,你沒事。
  • 如果有很多要求的應用程序交易,你可能要麼得到:
    1. 某種異常的(PMF拒絕透露更多的PM)
    2. 由谷歌(低效率)
帳單更多

有2種方式使用PM執行操作多個對象:

  • 批理線唱(創建,更新,刪除多個對象)
  • 交易(執行一個或多個業務邏輯/規則,並堅持)

批處理僅限於與同類型的對象,而交易被限制的實體同組。

一些建議:

  • 永遠閉上你的PM
  • 或者,你可以,如果你想關閉該PM後使用對象使用分離機制(例如,你希望JSP渲染對象的列表,但是你的servlet已經關閉你的PM了)

我希望能對你有所幫助。

0

您應儘量使用相同的PersistenceManager進行儘可能多的工作。

一直得到一個新的可能會導致不必要的開銷。如果你想使用交易,我相信你必須使用同一個經理來處理那裏的所有活動。

0

嘗試......

PersistenceManager pm = null; 
try 
{ 
      pm=PMF.get().getPersistenceManager(); 
      String query="select from "+PayPal_Message.class.getName()+" where processed == false order by time desc"; 
      List<PayPal_Message> messages=(List<PayPal_Message>)pm.newQuery(query).execute(); 
      if (!messages.isEmpty()) 
      { 
       for (PayPal_Message g : messages) 
       { 
       Contact_Info_Entry A_Contact_Entry=Process_PayPal_Message_To_Get_A_License(g.getContent().getValue()); 
       try 
       { 
        pm.makePersistent(A_Contact_Entry); 
        g.setProcessed(true); 
        pm.makePersistent(g); 
       } 
       catch (Exception e) 
       { 
        Send_Email(Email_From,"[email protected]","Servlet Error Message [ "+time+" ]",new Text(e.toString())); 
       } 
       } 
      } 
} 
finally 
{ 
if(pm != null) pm.close(); 
} 
相關問題