Сохранение в новый кластер возвращает ошибку

Я динамически создаю кластер в xtend/Java

for (int i : 0 ..< DistributorClusters.length) {
    val clusterName = classnames.get(i) + clusterSuffix;
    database.command(
                new OCommandSQL('''ALTER CLASS «classnames.get(i)» ADDCLUSTER «clusterName»''')).execute();
        }

Затем я создаю, добавляю oRole и предоставляю безопасность новому oRole

val queryOroleCreation = '''INSERT INTO orole SET name = '«clusterSuffix»', mode = 0, inheritedRole = (SELECT FROM orole WHERE name = 'Default')''';
        val ODocument result = database.command(new OCommandSQL(queryOroleCreation)).execute();
        for (int i : 0 ..< classnames.length) {
            database.command(
                new OCommandSQL(
                    '''GRANT ALL ON database.cluster.«classnames.get(i)»«clusterSuffix» TO «clusterSuffix»''')).
                execute();
        }

Наконец, я пытаюсь сохранить JsonObject в одном из недавно созданных кластеров. Я проверил в базе данных и кластер существует.

        val doc = new ODocument();
        doc.fromJSON(jsonToSave.toString());

        val savedDoc = database.save(doc, "ClassName"+clusterSuffix);
        database.commit();

Но Orient возвращает следующую ошибку:

SEVERE: java.lang.IllegalArgumentException: Cluster name 'cluster:ClassNameclusterSuffix' is not configured

Мой вопрос: Что вызывает это исключение? И можете ли вы добавить значения в новый созданный кластер?

Изменить

Объект doc содержит ссылку на другие классы. то есть:

{
    @class:"Customer",
    @version:0,
    name:"Kwik-E-Mart",
    user : {
        @class:"User",
        @version:0,
        username: "Apu",
        firstName:"Apu",
        lastName:"Nahasapeemapetilon"
    }
}

Пользователь создается в кластере по умолчанию, но customer выдает исключение.


person David Laberge    schedule 28.04.2015    source источник


Ответы (2)


Вы должны удалить часть «кластер:». Второй параметр метода — «Имя кластера, куда сохранять», для него не нужен специальный префикс.

So:

val savedDoc = database.save(doc, "ClassName"+clusterSuffix);

должно просто работать

person Wouter    schedule 28.04.2015
comment
Исключение точно такое же? Это странно. - person Wouter; 28.04.2015
comment
точно такой же, только без cluster: перед именем. Я отредактировал сообщение, чтобы добавить немного больше контекста. Надеюсь, поможет - person David Laberge; 28.04.2015
comment
Находится ли вызов сохранения документа в том же потоке, что и операторы создания кластера? Вы уже пытались сохранить документ, используя новое соединение с базой данных? Возможно, есть проблема с транзакцией/потоком - person Wouter; 28.04.2015
comment
Эта часть довольно процедурная. Шаг 1-2-3. - person David Laberge; 28.04.2015

Я обнаружил, что использование запроса работает нормально source.

Следующий код сработал с первой попытки:

val query = '''INSERT INTO ClassNameCLUSTER «"ClassName"+clusterSuffix» CONTENT «jsonToSave.toString()»'''
val ODocument savedDoc = database.command(new OCommandSQL(query)).execute();
person David Laberge    schedule 28.04.2015