2012-05-30 14 views
6

Ich habe eine Cross-Group-Transaktion in der App-Engine Java Jdo.Unit Testing XG Cross-Gruppen-Transaktion in App Engine Java JDO

Es funktioniert hervorragend auf dem lokalen Dev-App-Engine-Server.

Aber von Komponententests bekomme ich eine java.lang.IllegalArgumentException: transactions on multiple entity groups only allowed in High Replication applications.

Ist es möglich, eine High Replication-Anwendung mit LocalServiceTestHelper zu simulieren?

Ich benutze 1.6.6.

Hier ist meine Klasse, können Sie es laufen, wie es zu reproduzieren ist:

public class Ds2Test { 

    private final LocalServiceTestHelper helper = 
      new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); 

    private static final PersistenceManagerFactory pmfXgInstance = 
      JDOHelper.getPersistenceManagerFactory("xg-transactions"); 

     @Before 
     public void setUp() { 
      helper.setUp(); 
     } 

     @After 
     public void tearDown() { 
      helper.tearDown(); 
     } 

     @Test 
     public void testXgTransaction() throws Exception { 
      PersistenceManager xgPm = pmfXgInstance.getPersistenceManager(); 
      Transaction xgTx = xgPm.currentTransaction(); 
      xgTx.begin(); 

      xgTx.commit(); 
      xgPm.close(); 
     } 
} 

Und hier ist die Konfiguration in jdoconfig.xml:

<persistence-manager-factory name="xg-transactions"> 
     <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"/> 
     <property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/> 
    </persistence-manager-factory> 

die Ausnahme auf xgTx.begin();

geworfen wird

Antwort