2012-05-30 6 views
6

私はアプリエンジンjava jdoでクロスグループトランザクションを持っています。ユニットテストApp Engine JavaでのXGクロスグループトランザクションJava JDO

これは、ローカルdevのアプリエンジンサーバー上で素晴らしい動作します。

しかし、単体テストではjava.lang.IllegalArgumentException: transactions on multiple entity groups only allowed in High Replication applicationsが得られます。

LocalServiceTestHelperを使用して高レプリケーションアプリケーションをシミュレートすることはできますか?

私は1.6.6を使用しています。ここで

が私のクラスでそれが再現することであるとして、あなたはそれを実行することができます:

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

そして、ここでは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> 

例外がxgTx.begin();

にスローされます

答えて