2016-07-29 28 views
1

Ich habe OObjectDatabaseTx. Ich möchte mit api meine eigene Konfliktstrategie festlegen.OrientDB. Einstellung ConflictStrategy wirft eine Ausnahme

Bei der Ausführung bekomme ich eine Ausnahme sarying, dass die Operation nicht unterstützt wird.

10:40:48,718 INFO [com.ats.vis.services.transaction.TransactionManager] (TransactionExecutor[UML]) [__MAIN_WS__] ERROR:: java.lang.UnsupportedOperationException: setConflictStrategy 
at com.orientechnologies.orient.client.remote.OStorageRemoteThread.setConflictStrategy(OStorageRemoteThread.java:318) [orientdb-client-2.1.19.jar:2.1.19] 
at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.setConflictStrategy(ODatabaseDocumentTx.java:1122) [orientdb-core-2.1.19.jar:2.1.19] 
at com.orientechnologies.orient.object.db.OObjectDatabaseTx.setConflictStrategy(OObjectDatabaseTx.java:760) [orientdb-object-2.1.19.jar:2.1.19] 

Gibt es eine Möglichkeit, die Konfliktstrategie festzulegen?

+0

Hallo @Nem, können Sie den Fehler posten? Thx im Voraus –

+0

Sicher. Ich habe die Ausnahme hinzugefügt. – Nem

Antwort

2

Sie setzen es im Client, aber das ist nicht möglich, weil es der Server ist, der es verwendet. Sie sollten es lieber auf dem Server installieren, wenn Sie OrientDB mit dem Protokoll "remote" verwenden. Wie geht das?

Es ist sehr einfach, schreiben Sie eine Server Plugin, die in der startup() registrieren Sie sich selbst als Datenbank-Listener. Nachdem Sie die Methoden onOpen() und onCreate() implementiert haben, können Sie auf diese Weise Ihre Konfliktstrategie wie bereits zuvor installieren. Beispiel (nicht ausprobiert):

public class MyPlugin OServerPluginAbstract implements ODatabaseLifecycleListener { 
    @Override 
    public void startup() { 
    Orient.instance().addDbLifecycleListener(this); 
    } 

    @Override 
    public void onOpen(final ODatabaseInternal db) { 
    db.setConflictStrategy(new ORecordConflictStrategy() { 
     @Override 
     public byte[] onUpdate(OStorage storage, byte iRecordType, ORecordId rid, ORecordVersion iRecordVersion, byte[] iRecordContent, ORecordVersion iDatabaseVersion) { 
      <implementation>; 
     } 

     @Override 
     public String getName() { 
      return "SOME NAME"; 
     } 
    }); 
    } 

    @Override 
    public void onOpen(final ODatabaseInternal db) { 
    onOpen(db); 
    } 
    // BOILERPLATE CODE MISSING 
} 

und dann als Handler in config/orientdb-server-config.xml Datei registrieren:

<handler class="com.orientechnologies.orient.server.handler.OJMXPlugin"> 
     <parameters> 
     </parameters> 
    </handler> 
+0

Danke für die Antwort, @Lvca! Ich werde es jetzt versuchen – Nem