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

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

Синхронизация работает, но медленно, потому что выполняет каждую задачу отдельно. Я знаю, что существуют 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
}

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


person Philip    schedule 22.04.2015    source источник


Ответы (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("[email protected]").setRole("READER"))
    .queue(batch, callback);
storage.objectAccessControls().insert("bucket-name", "object-key3",
    new ObjectAccessControl().setEntity("[email protected]").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)

person m.aibin    schedule 21.01.2016
comment
Не могли бы вы показать мне, как бы вы изменили пример кода в моем вопросе, чтобы он был поставлен в очередь и готов к пакетному выполнению? Я не понимаю, откуда в моем фрагменте кода могут появиться такие переменные, как httpRequest1 в вашем примере. - person Philip; 22.01.2016
comment
httpRequest1 будет одним целым запросом из вашего кода (весь блок try). Затем вам нужно обернуть его в httpRequest и сделать это для всех итераций. Наконец, вы можете выполнить пакет. Пакетный API Java указывает, как должен выглядеть httpRequest. - person m.aibin; 22.01.2016