出于测试目的,我需要运行具有高复制数据存储(HRD)的本地App Engine Java开发服务器,但没有未应用的作业。我希望在我的独立单元测试中获得与以下相同的效果:
LocalDatastoreServiceTestConfig cfg
= new LocalDatastoreServiceTestConfig();
cfg.setApplyAllHighRepJobPolicy()
LocalServiceTestHelper helper = new LocalServiceTestHelper(cfg);
helper.setUp();
在开发服务器上这些类不可用,那么在开发服务器上是否有任何方法可以使用没有未应用作业的HRD?
(对于具有JVM标志的开发应用服务器启用了HRD - Ddatastore.default_high_rep_job_policy_unapplied_job_pct
。如果我将其设置为零,则会禁用HRD并使用主从数据存储区)
我不能简单地使用Master-Slave数据存储区,因为至少使用objectify(4.0b)这会给跨组事务带来麻烦。它们将失败并显示以下消息:cross-group transaction need to be explicitly specified
。
答案 0 :(得分:1)
您可以设置自己的工作政策。这就是我使用的:
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());