【问题标题】:Datanucleus/JDO Level 2 Cache on Google App EngineGoogle App Engine 上的 Datanucleus/JDO 2 级缓存
【发布时间】:2011-01-01 23:00:03
【问题描述】:

是否可以(并且有意义)将 JDO 2 级缓存用于 Google App Engine 数据存储区?

首先,为什么 Google 的网页上没有关于此的文档?它有一些问题吗?我们是否需要设置限制来保护我们的内存缓存配额?

根据DataNucleus on Stackoverflow,可以设置以下持久化属性:

 datanucleus.cache.level2.type=javax.cache
 datanucleus.cache.level2.cacheName={cache name}

就这些了吗?我们可以选择任何缓存名称吗?

Othersources 在 Internet 上使用不同的设置报告。

另外,我们似乎需要下载DataNucleus Cache support plugin。哪个版本合适?我们是把它放在WEB-INF/lib 还是需要更多设置才能激活它?

【问题讨论】:

  • 你有没有得到这个?我正在尝试在使用 JDO 2 级缓存和谷歌文档提到的 JCache 实现之间做出决定,并且似乎缺乏关于这个主题的文档/讨论。
  • 没有。我没有得到任何地方。我正在考虑使用低级数据存储 API(或在此之上的替代库)。 JDO 对我来说太黑了。
  • 我们似乎属于一个不快乐的大俱乐部 =/
  • 我得到了这个工作。提示: 1. 下载 jar 的 1.1.1 版本 2. 将这些添加到您的 jdoconfig.xml 中: datanucleus.cache.level2.type=javax.cache datanucleus.cache.level2.cacheName={cache name} 3. 做任何你想做的事想要缓存的可序列化 4. 对任何想要缓存的东西调用 makePersistent,即使它已经是持久的。 5. 将所有内容包装在事务中(这是必需的,因为它使用异步 JCache)请参阅:datanucleus.org/products/datanucleus/jdo/cache.html#javax_cache

标签: java google-app-engine caching jdo datanucleus


【解决方案1】:

在你弄明白之前,你必须回答一个问题:

您使用的是哪个版本的 DataNucleus?

这篇文章中的所有内容都与旧版本的插件有关——v1。直到最近,Google Plugin for Eclipse 才支持 AppEngine 的 DataNucleus 插件 v2(它基本上是 AppEngine 和 DataNucleus Core 之间的管道)。

我建议将 AppEngine 的 Datanucleus 插件升级到 v2——如果您使用的是 Eclipse,这很容易——它有一个 UI 允许您选择 v1 或 v2。只需转到您的项目属性并找到 App Engine 设置并查找“Datanucleus JDO/JPA 版本”。

另外,您必须更改您的jdo-config.xml。具体来说,您只需更改一个属性:

<property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>

SO -- 升级到 v2 后,这就是您指定缓存的方式(对 jdoconfig.xml 的补充):

<property name="datanucleus.cache.level2.type" value="jcache"/>
<property name="datanucleus.cache.level2.cacheName" value="NameItWhateverYouWant"/>

此时,每次您使用 PersistenceManager 放置和获取时,都会自动进行缓存。万岁!

【讨论】:

    【解决方案2】:

    它似乎有问题:我尝试(使用 JPA)并且我得到了其他人已经报告的错误:http://code.google.com/p/datanucleus-appengine/issues/detail?id=163

    【讨论】:

      【解决方案3】:

      没有任何与 L2 缓存和 GAE/J 相关的已知问题。如果人们有问题,那么也许他们应该向谷歌报告。将缓存名称设置为您想要的名称。显然,放入 memcache 的任何东西都必须是可序列化的,因为这就是 memcache 的作用。是的,您需要 datanucleus-cache 插件(版本 1.x),并将其放在与任何其他 DN jar 相同的位置。 Google 有一天会更新为使用 DN 2.x

      【讨论】:

      • 为什么实体类必须是可序列化的? DataNucleus 已经可以把它变成一个低级的 datastore.Entity,它已经是 Serializable。
      猜你喜欢
      • 2014-01-24
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2012-01-25
      相关资源
      最近更新 更多