jdoデータストアトランザクションに関するGoogleのドキュメントでもどこでもチェックしましたが、何も見つかりませんでした。私の問題は、ArrayList を持つエンティティがあり、アイテムが失われたり、正しく保存されなかったりすることがあります。本番環境で一貫性がなく、データが失われているため、これは大きな問題です。
親エンティティ:
@PersistenceCapable
public class Account
@Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "key ASC"))
private ArrayList<Match> matches = new ArrayList<Match>();
子供:
@PersistenceCapable
public class Match
@Persistent
private ArrayList<Long> players = new ArrayList<Long>();
これで、プレイヤーの配列リストを 15 分ごとに更新する cron タスクができました。
PersistenceManager manager = PMFactory.get().getPersistenceManager();
List<Account> accounts = <<obtain all accounts>>
for (Account account : accounts) {
Transaction tx = manager.currentTransaction();
tx.begin();
List<Long> players = account.getMatches.getPlayers();
<<add or remove elements - players.remove()/players.add()>>
tx.commit();
}
manager.close();
コードは単なる要約です。私はすべてを試して/キャッチしてログに記録します。例外は発生せず、タスクは正常に終了します。ローカルでこのエラーを再現できません。私は約 300 のアカウントを持っており、それぞれにおそらく 10 件の一致があります。試合に出場できる選手は 20 人以下です。選手リストが正しく更新されないことがあります...または一部の要素が失われることさえあります。ほとんどの場合、それは機能します。たぶん、2番目または3番目のインスタンスが生き返ったとき?? Persistence Manager を閉じて、アカウントごとに新しいものを取得する必要がありますか? jdo 2.3を使用しています。このアプリを 4 年間使用してきましたが、より多くのアカウントを開設した今、この問題が発生しています。絶望してください!:-( よろしくお願いします!
jdoconfig.xml
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
<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"/>
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>
<property name="datanucleus.appengine.singletonPMFForName" value="true"/>
</persistence-manager-factory>
</jdoconfig>
persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
</properties>
</persistence-unit>
</persistence>