2010-04-25 49 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(); 
} 
相关问题