单元测试App Engine Java JDO中的XG Cross Group事务

Pat*_*ick 6 java google-app-engine unit-testing transactions jdo

我在app engine 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();
        }
}
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

抛出异常 xgTx.begin();

Pat*_*ick 15

好.我找到了需要做的事情.

private final LocalServiceTestHelper helper =
            new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()**.setDefaultHighRepJobPolicyUnappliedJobPercentage(100))**;
Run Code Online (Sandbox Code Playgroud)

如上所示:https://developers.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests

有点模糊的设置,但它确实存在.