2015-12-03 2 views
2

Я пытаюсь встроить в приложение Java, которое использует базу данных H2. Приложение является клиентским узлом и использует класс ClientSymmetricEngine из API SymmetricDS.Создание таблиц SYM в Embedded SymmetricDS

Главный узел запускает автономный сервер симметричных сигналов, и мне удалось синхронизировать данные, когда я использовал уже настроенные databsae из предыдущих тестов в приложении.

При запуске приложения на новую базу данных, она выдает это исключение:

java.lang.IllegalStateException: This node has not been configured.Could not find a row in the identity table 
at 
org.jumpmind.symmetric.service.impl.RegistrationService.openRegistration(RegistrationService.java:562) 
at 
org.jumpmind.symmetric.service.impl.RegistrationService.openRegistration(RegistrationService.java:530) 
at 
org.jumpmind.symmetric.service.impl.RegistrationService.openRegistration(RegistrationService.java:519) 
at 
org.jumpmind.symmetric.AbstractSymmetricEngine.openRegistration(AbstractSymmetricEngine.java:890) 
at syncdemo.ClientNode.<init>(ClientNode.java:32) 
at syncdemo.SyncDemo.main(SyncDemo.java:37) 

Как создать SYM таблицы в узле клиента через API?

Я получил код для синхронизации от here. Который используется в классе ClientNode следующим образом:

public class ClientNode { 
private ClientSymmetricEngine cEngine; 
private File propFile; 


public ClientNode(File file) throws FileNotFoundException, IOException { 
    propFile = file; 
    Properties propertiesFile = new Properties(); 
    propertiesFile.load(new FileReader(propFile)); 
    cEngine = new ClientSymmetricEngine(propertiesFile, true); 
    getcEngine().openRegistration("store", "001"); 
    getcEngine().setup(); 
    getcEngine().start(); 
} 

public ClientSymmetricEngine getcEngine() { 
    return cEngine; 
} 

public void setcEngine(ClientSymmetricEngine cEngine) { 
    this.cEngine = cEngine; 
} 
} 

Calling класс clientNode отсюда:

public class SyncDemo {  

public static void main(String[] args) { 

     try 
     { 
     new ClientNode(new File("/client.properties")); 
     } 
     catch (Exception e) 
     { 
     e.printStackTrace(); 
     } 

} 
} 

Содержание client.properties файла:

external.id=001 
engine.name=store-001 
sync.url=http://192.168.1.107:31415/sync/corp-000 
group.id=store 
db.url=jdbc:h2:./syncdata/store001;AUTO_SERVER=TRUE;LOCK_TIMEOUT=60000 
db.driver=org.h2.Driver 
db.user=symmetric 
registration.url=http://192.168.1.107:31415/sync/corp-000 
db.password= 
auto.config.database=true 

Я просто заметил, что даже если SYM-таблицы присутствуют в базе данных клиентского узла, такое же исключение выдается, если в таблицы SYM_NODE и SYM_NODE_IDENTITY не вставлены соответствующие данные.

+0

Можете ли вы добавить исключение? И показать код, используемый для синхронизации вашей БД? – Riduidel

ответ

0

Принятый ответ не сработал для меня, у меня все еще такая же ошибка. Я получил это работает с комбинацией изменения принятого ответа, а также понимание:

  1. sync.url на каждый клиентский узел приходит от сервера во время регистрации.
  2. registration.url сообщает клиентским узлам, где находится узел конфигурации (мастер).
  3. Если вы когда-либо ввернули любого из них в прошлом, что-то в ваших сим-таблицах испортилось. Вероятно, вам лучше стереть вашу базу данных и начать снова.
  4. таблицы sym_ не заполняются автоматически во встроенном приложении. Вы должны вручную заполнить их. Файл .../samples/insert_sample.sql является вашим другом.
+0

Вы правы, ваш лучший объяснительный ответ. Должен признаться, для изучения этих деталей потребовалось немало времени и много усилий. –

0

Проблемы был решен путем изменения коды:

public ClientNode(File file) throws FileNotFoundException, IOException { 
propFile = file; 
Properties propertiesFile = new Properties(); 
propertiesFile.load(new FileReader(propFile)); 
cEngine = new ClientSymmetricEngine(propertiesFile, true); 
getcEngine().setup(); 
getcEngine().openRegistration("store", "001"); 
getcEngine().start(); 
} 

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

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

  • Нет связанных вопросов^_^