出于测试目的,我需要运行具有高复制数据存储(HRD)的本地App Engine Java开发服务器,但没有未应用的作业。我希望通过以下方式在独立单元测试中获得与我相同的效果:

LocalDatastoreServiceTestConfig cfg
    = new LocalDatastoreServiceTestConfig();
cfg.setApplyAllHighRepJobPolicy()
LocalServiceTestHelper helper = new LocalServiceTestHelper(cfg);
helper.setUp();


在开发服务器上,这些类不可用,那么有什么办法可以在开发服务器上拥有没有未应用作业的HRD?

(使用JVM标志-Ddatastore.default_high_rep_job_policy_unapplied_job_pct为开发应用服务器启用了HRD。如果将其设置为零,它将禁用HRD并改用主从数据存储)

我不能简单地使用主从数据存储,至少使用objectify(4.0b)会给跨组事务带来麻烦。它们将失败,并显示以下消息:cross-group transaction need to be explicitly specified

最佳答案

您可以设置自己的工作策略。这是我用的:

public class AlwaysApplyJobPolicy implements HighRepJobPolicy
{
    @Override
    public boolean shouldApplyNewJob(Key arg0) {
        return true;
    }

    @Override
    public boolean shouldRollForwardExistingJob(Key arg0) {
        // This should be irrelevant because all jobs apply immediately
        return true;
    }
}

private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(
                // Our tests assume strong consistency
                new LocalDatastoreServiceTestConfig().setAlternateHighRepJobPolicyClass(AlwaysApplyJobPolicy.class),
                new LocalMemcacheServiceTestConfig(),
                new LocalTaskQueueTestConfig());

07-24 09:18