2013-10-19 14 views
5

Io uso JDO entro GAE a lotto persistono oggetti utilizzando il seguente metodo:Dove posso impostare TransactionOptions con JDO/Google App Engine?

public void makePersistent(PersistenceManager pm, 
     List<Regeling> makePersistent) {   
    Transaction tx = pm.currentTransaction(); 
    try { 
     // Start the transaction 
     tx.begin(); 
     // Persist to the datastore 
     // pm.makePersistentAll(makePersistent); 
     for (int i = 0; i < makePersistent.size(); i += BATCH_SIZE) { 
      int last = i + BATCH_SIZE; 
      last = last > makePersistent.size() ? makePersistent.size() 
        : last; 
      pm.makePersistentAll(makePersistent.subList(i, last)); 
      pm.flush(); 
      System.out.println("Made "+last+" items persistent."); 
     } 
     // Commit the transaction, flushing the object to the datastore 
     tx.commit(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (tx.isActive()) { 
      // Error occurred so rollback the transaction 
      System.out.println("Rolling back transaction"); 
      tx.rollback(); 
     } 
     pm.close(); 
    } 
} 

Questo rompe:

javax.jdo.JDOUserException: One or more instances could not be made persistent 
    at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistentAll(JDOPersistenceManager.java:791) 
    ... 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
NestedThrowablesStackTrace: 

java.lang.IllegalArgumentException: cross-group transaction need to be explicitly specified, see TransactionOptions.Builder.withXGfound both 

Element { 
    type: "PersistentServiceResultaat$RegelingInfoLijst$Regeling" 
    name: "BWBR0001821" 
} 
and 

Element { 
    type: "PersistentServiceResultaat$RegelingInfoLijst$Regeling" 
    name: "BWBR0001822" 
} 

così cerco di impostare le seguenti opzioni:

TransactionOptions ops = TransactionOptions.Builder.withXG(true); 

ma io non riesce a trovare un metodo che accetta un oggetto TransactionOptions. Dove posso impostare queste opzioni?

+0

cura di spiegare perché qualcuno downvoted? – Maarten

risposta

5

Set in jdoconfig.xml:

<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true" />