2015-04-28 2 views
0

Я создаю кластер динамически в 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 бросает исключение.

ответ

0

Я считаю, что с помощью запроса в порядке source работы.

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

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

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

Итак:

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

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

+0

Я пробовал, но это не исправили проблему. –

+0

Исключение точно такое же? Странно. – Wouter

+0

точно так же, без 'cluster:' infront имени. Я отредактировал сообщение, чтобы добавить немного больше контекста. Надеюсь, это поможет –

Смежные вопросы