Fra*_*fka 5 eclipse gwt google-app-engine jdo datanucleus
今天,这是我第一次使用GWT和JDO.我在本地调试模式下使用Eclipse运行它.
我做了以下事情:
public Collection<MyObject> add(MyObject o) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(o);
Query query = pm.newQuery(MyObject.class);// fetch all objects incl. o. But o only sometimes comes...
List<MyObject> rs = (List<MyObject>) query.execute();
ArrayList<MyObject> list= new ArrayList<MyObject>();
for (MyObject r : rs) {
list.add(r);
}
return list;
} finally {
pm.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经入住<property name="datanucleus.appengine.datastoreReadConsistency" value="STRONG" />了jdoconfig.xml.我是否必须在配置中设置其他一些事务?有人有工作jdoconfig.xml吗?或者是其他地方的问题?一些缓存介于两者之间?
编辑:我尝试过的事情:
PersistenceManager虽然PMF.get().getPersistenceManager()多次调用PersistenceManagerflush和checkConsistencyjdoconfig:
<persistence-manager-factory name="transactions-optional">
<property name="datanucleus.appengine.datastoreReadConsistency" value="STRONG" />
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
Run Code Online (Sandbox Code Playgroud)
因为所有方法都失败了,我必须在这里遗漏一些内容......
编辑2:当我将作业拆分为两个事务时,日志表示写入事务已捕获,然后读取事务开始.但它没有找到刚才持久的对象.它总是说也是Level 1 Cache of type "weak" initialised.周是坏还是好?
大约30%的请求出错了......我可能会遇到一些懒惰的查询加载问题吗?
Franz,JDO 配置中的默认读取一致性是“强”。所以如果你试图朝那个方向接近它,它不会带你到任何地方
检查一下,因为我认为它提到了与您遇到的场景类似的内容,提交的数据未在查询中返回。正如所提到的,它不是并发的,但它解释了提交过程。
http://code.google.com/appengine/articles/transaction_isolation.html
另外,另一种方法是使用范围进行查询,并查明这是否可以解决您正在查看的特定用例,因为我相信您正在提取表中的所有记录。
编辑 :
因为在您提到的代码片段中,它查询整个表。如果这就是您需要的,您可以使用 Extent...使用它的方法是调用
Extent ext = getExtent(<Entity Class name>)
在 persistenceManager 单例对象上。然后您可以迭代 Extent
查看文档并在此处的页面上搜索范围。 http://code.google.com/appengine/docs/java/datastore/jdo/queries.html
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |