有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Google应用程序引擎(Java)+Spring管理的PersistenceManager

我对刚检索到的对象列表的JDO持久性有点问题

我想做的是:

  • 获取“订单”列表
  • 修改一个属性“状态”
  • 批量更新“订单”

到目前为止,我得到的是“id为的对象…由另一个对象管理器管理”。 但是等等,没有春天,我还没有遇到过这样的问题

我试着这样调试它:

List<Orderr> orders = orderDao.findByIdAll(ordersKeys);
for(Orderr o : orders) {
    System.out.println(JDOHelper.getPersistenceManager(o).hashCode());
    //hashcode is 1524670
    o.setSomething(somevalue);
}
orderDao.makePresistentAll(orders); //hashcode inside is 31778523

makePersistentAll只执行以下操作:

try {
    System.out.println(getPersistenceManager().hashCode());
    getPersistenceManager().makePersistentAll(entities);
} finally {
    getPersistenceManager().close();
}

我所有的DAO都扩展了JdoDaoSupport。Pmf由spring注入和管理

最后,这里有一个问题:为什么在findByIdAll之后持久性管理器关闭了?或者为什么我要获得新的持久性管理器实例?当然,我的findByIdAll方法不会在持久性管理器上调用close

当然,如果我为每个“订单”调用makePersistent,它会工作得很好。但它打破了业务和数据库逻辑的分层

UPD 刚发现在迁移到spring管理的PersistenceManager之后,对makePersistentAll的所有调用都无法工作。在春天之前,我使用了普通的旧PMF。找一个助手,一切都很闪亮


共 (2) 个答案

  1. # 1 楼答案

    这是一种魔力。每次我在这里问一个问题,我都会在发帖后24小时内知道问题的答案

    当然,根据其含义,工厂应该始终创建一个新的pm实例。现在我保存了对我的旧pm的引用(就像我在spring jdo daos之前做的那样),一切都好了

  2. # 2 楼答案

    如果您的应用程序响应HTTP请求保持活动状态超过30秒,它将被终止。GAE运作模式的一部分是,你的应用不会长久存在。一点也不

    虽然您不会在自己的站点上执行此操作,但您必须习惯于只对DB会话管理器进行短期访问。有时,为每个事务重新打开它需要很多时间,但GAE就是这样使流程具有可伸缩性的。如果你真的有很多流量,它可以在几个服务器上并行运行你的应用程序