Пользовательская HighRepJobPolicy на сервере разработки Google App Engine - PullRequest
1 голос
/ 15 февраля 2012

Я использую пользовательский HighRepJobPolicy на сервере разработки App Engine.Тот же класс отлично работает, когда я использую его в своих модульных тестах:

LocalDatastoreServiceTestConfig datastoreConfig = new LocalDatastoreServiceTestConfig();
datastoreConfig.setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class);

Но когда я пытаюсь использовать этот класс на сервере разработки Java, добавив тег JVM

-Ddatastore.high_replication_job_policy_class=foo.bar.CustomHighRepJobPolicy

Я получаю ClassNotFoundException:

Caused by: java.lang.ClassNotFoundException: foo.bar.CustomHighRepJobPolicy
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at com.google.appengine.api.datastore.dev.LocalDatastoreService.initHighRepJobPolicy(LocalDatastoreService.java:426)
        ... 66 more

Ожидается ли это сработает, или кто-то еще пробовал это раньше?Я спрашиваю, потому что я не смог найти какую-либо информацию об этом через Google, а в App Engine docs упоминается только DefaultHighRepJobPolicy.

1 Ответ

0 голосов
/ 13 января 2015

Похоже, вы были на вечеринке рано :

public class LocalCustomPolicyHighRepDatastoreTest {
    private static final class CustomHighRepJobPolicy implements HighRepJobPolicy {
        static int count = 0;
        @Override
        public boolean shouldApplyNewJob(Key entityGroup) {
            // every other new job fails to apply
            return count++ % 2 == 0;
        }

        @Override
        public boolean shouldRollForwardExistingJob(Key entityGroup) {
            // every other existing job fails to apply
            return count++ % 2 == 0;
        }
    }

    private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
           .setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class));

    @Before
    public void setUp() {
        helper.setUp();
    }

    @After
    public void tearDown() {
        helper.tearDown();
    }

    @Test
    public void testEventuallyConsistentGlobalQueryResult() {
        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
        ds.put(new Entity("yam")); // applies
        ds.put(new Entity("yam")); // does not apply
        // first global query only sees the first Entity
        assertEquals(1, ds.prepare(new Query("yam")).countEntities(withLimit(10)));
        // second global query sees both Entities because we "groom" (attempt to
        // apply unapplied jobs) after every query
        assertEquals(2, ds.prepare(new Query("yam")).countEntities(withLimit(10)));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...