3

H2 データベースを使用する Java アプリケーションにSymmetricds 3.7 を埋め込もうとしています。アプリケーションはクライアント ノードであり、ClientSymmetricEngineSymmetricDS API のクラスを使用します。

マスター ノードはスタンドアロンの symmetricds サーバーを実行し、以前のテストで構成済みのデータベースをアプリケーションで使用すると、データを同期できました。

新しいデータベースでアプリケーションを実行すると、次の例外がスローされます。

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)

API を使用してクライアント ノードに SYM テーブルを作成するにはどうすればよいですか?

ここから同期用のコードを取得しました。次のように 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;
}
}

ここから 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 テーブルに挿入されない限り、同じ例外がスローされることに気付きました。

4

2 に答える 2

1

この問題は、コードを変更することで解決されました。

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();
}

setup() 関数はデータベースに構成テーブルを作成し、登録前に呼び出す必要があると思います。

于 2015-12-08T06:25:56.933 に答える