java实现无主关系googleappengine
我的问题更多的是关于如何实现与Google App Engine的无主关系的最佳实践问题。我正在使用JDO进行我的持久化,就像google文档中推荐的那样。我正在持久化我的无主关系列表,如下所示:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable, UserDetails {
...
@Persistent
private List<Key> groups;
...
}
现在,当我使用键对象查询对象列表时,遇到了我的困境。因此,当我得到组键列表时,为了实际返回组对象列表,我必须查找该键才能得到对象。我的问题是,在模型对象上执行无主查找的推荐方法是什么
我的模型对象上是否应该有PersistanceManagerFactory的实例,以便进行查找
我应该在我的模型对象上有一个GroupDAO对象的实例,这样我就可以进行查找了吗
我应该有一个实用程序来执行这种类型的查找吗
我是新手,所以我只想知道哪种方法最好。谢谢
# 1 楼答案
谷歌recommends创建一个单例持久化管理器工厂。我不会在你的模型里放一个PMF
# 2 楼答案
理想情况下,
User
对象将有一个返回List<UnownedObject>
的方法,以便调用方获得干净的API。一种方法是User
对象拥有DAO的实例,这样它就可以请求DAO执行查询为了做到这一点,在请求结束之前不能关闭
PersistenceManager
。一种方法是创建一个servlet filter:然后可以将
PersistenceManager
注入DAO。如果使用Guice,可以执行以下操作:当
UserDao
与User
位于同一个包中时,这种方法效果最好,因此User.setUserDao()
可以是包范围。您可以决定将PersistenceManager
设置为User
对象,而不是UserDao
接下来,您需要创建一个Guice模块来绑定
PersistenceManager
:最后,您需要配置Google App Engine to use Guice
这只是一种可能的方法。如果让
providePersistenceManager
创建PersistenceManager
并将其存储为请求属性,而不是让servlet过滤器创建PersistenceManager
(过滤器仍然会关闭它),您可能会更聪明。您还可以让servlet过滤器获得Guice注入器,这样您就可以避免使用setAttribute()
和getAttribute()
,而是使用更安全的API