gpt4 book ai didi

java - Google App Engine (Java) + Spring 管理的 PersistenceManager

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:12 24 4
gpt4 key购买 nike

我在 JDO 持久性刚刚检索到的对象列表方面遇到了一些问题。

我想做的是:

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

到目前为止,我得到的是“具有 id 的对象...由不同的对象管理器管理”。但是等等,如果没有 Spring,我还没有遇到过这样的问题!

我尝试像这样调试它:

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注入(inject)和管理。

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

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

UPD刚刚发现迁移到 spring 管理的 PersistenceManager 后,所有对 makePersistentAll 的调用都不起作用。在 Spring 之前,我使用了普通的旧 PMF.get() 助手,一切都闪闪发光!

最佳答案

如果您的应用响应 HTTP 请求而保持 Activity 状态的时间超过 30 秒,它将被终止。 GAE 运作模式的一部分是您的应用程序生命周期不长。完全没有。

虽然您不会在自己的站点上执行此操作,但您必须习惯于只能短期访问数据库 session 管理器。有时需要花费大量时间来为每笔交易重新打开它,但这就是 GAE 使流程可扩展的方式。如果你确实有很多流量,它可以在多台服务器上并行运行你的应用程序。

关于java - Google App Engine (Java) + Spring 管理的 PersistenceManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com