2012-05-30 17 views
6

Ho una transazione di gruppo incrociato nel motore di app java jdo.Test unitario XG Cross Group Transaction in App Engine Java JDO

Funziona perfettamente sul server del motore di app locale.

Tuttavia, dal test di unità, ho un java.lang.IllegalArgumentException: transactions on multiple entity groups only allowed in High Replication applications.

E 'possibile simulare un applicazione ad alta replica utilizzando LocalServiceTestHelper?

Sto usando 1.6.6.

Qui è la mia classe, è possibile eseguirlo in quanto è quello di riprodurre:

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(); 
     } 
} 

E qui è la configurazione 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> 

L'eccezione viene generata sulla xgTx.begin();

risposta