App Engine Java JDO 中的单元测试 XG 跨组事务

Posted

技术标签:

【中文标题】App Engine Java JDO 中的单元测试 XG 跨组事务【英文标题】:Unit Testing XG Cross Group Transaction in App Engine Java JDO 【发布时间】:2012-06-04 10:35:18 【问题描述】:

我在应用引擎 java jdo 中有一个跨组事务。

它在本地开发应用引擎服务器上运行良好。

但是,通过单元测试,我得到了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(); 上抛出异常

【问题讨论】:

【参考方案1】:

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

private final LocalServiceTestHelper helper =
            new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()**.setDefaultHighRepJobPolicyUnappliedJobPercentage(100))**;

见于:https://developers.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests

有点晦涩的设置,但确实存在。

【讨论】:

以上是关于App Engine Java JDO 中的单元测试 XG 跨组事务的主要内容,如果未能解决你的问题,请参考以下文章

对于基于(以前免费的)App Engine 构建的 Java/JDO 应用程序,有啥更实惠的托管选项? [关闭]

使用 Google App Engine 和 JDO 进行全文搜索?

为啥 Google App Engine 文档强调 JDO 而不是 JPA?

Google App Engine 的 JDO:转义引号

App Engine、JDO 和 Maven。启动时出错

在哪里使用 JDO/Google App Engine 设置 TransactionOptions?