Пакетные операции в Google Apps Admin Java API

Я написал приложение Java, которое синхронизирует группы Google в нашем домене Google Apps для учебных заведений (по функциям аналогично синхронизации с Google Apps School Directory Sync, но настроено для некоторых наших конкретных потребностей).

Синхронизация работает, но она медленная, потому что она выполняет каждую задачу в отдельности. Я знаю, что есть API-интерфейсы для пакетных операций, но я не могу найти примеров того, как это реализовано с помощью Java API.

Код, который я использую, выглядит примерно так (аутентификация и другие настройки выполняются в другом месте):

try
{
    Member m = new Member ();
    m.setEmail (member);
    m.setRole ("MEMBER");
    service.members ().insert (group, m).execute ();
}
catch (Exception e)
{
    // ERROR handling
}

Вместо того, чтобы выполнять эти операции один за другим, я хотел бы вместо этого их пакетировать. Может кто-нибудь сказать мне, как?

1 ответ

Решение

Посмотрите здесь: Пакетный Java API

Например:

BatchRequest batch = new BatchRequest(httpTransport, httpRequestInitializer);
batch.setBatchUrl(new GenericUrl(/*your customized batch URL goes here*/));
batch.queue(httpRequest1, dataClass, errorClass, callback);
batch.queue(httpRequest2, dataClass, errorClass, callback);
batch.execute();

Помните, что:

Тело каждой части представляет собой полный HTTP-запрос с собственным глаголом, URL, заголовками и телом. HTTP-запрос должен содержать только часть пути URL; полные URL не разрешены в пакетных запросах.

ОБНОВИТЬ

Посмотрите также здесь, как собрать пакет с помощью Google Batch API:

https://github.com/google/google-api-java-client

ОБНОВЛЕНИЕ 2

Попробуйте что-то вроде этого:

// Create the Storage service object
Storage storage = new Storage(httpTransport, jsonFactory, credential);

// Create a new batch request
BatchRequest batch = storage.batch();

// Add some requests to the batch request
storage.objectAccessControls().insert("bucket-name", "object-key1",
    new ObjectAccessControl().setEntity("user-123423423").setRole("READER"))
    .queue(batch, callback);
storage.objectAccessControls().insert("bucket-name", "object-key2",
    new ObjectAccessControl().setEntity("user-guy@example.com").setRole("READER"))
    .queue(batch, callback);
storage.objectAccessControls().insert("bucket-name", "object-key3",
    new ObjectAccessControl().setEntity("group-foo@googlegroups.com").setRole("OWNER"))
    .queue(batch, callback);

// Execute the batch request. The individual callbacks will be called when requests finish.
batch.execute();

Отсюда: пакетный запрос с Google Storage Json Api (JAVA)

Другие вопросы по тегам