东方数据库。设置 ConflictStrategy 抛出异常

OrientDB. Setting ConflictStrategy throwing an exception

我有 OObjectDatabaseTx。我想使用 api.

设置我自己的冲突策略
OObjectDatabaseTx 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";
            }
        });

执行时出现异常,提示不支持该操作。

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]

有什么方法可以设置冲突策略吗?

您在客户端设置它,但这是不可能的,因为它是使用它的服务器。如果您使用带有 "remote" 协议的 OrientDB,您应该将它安装在服务器中。怎么做?

很简单,写一个Server Plugin,在startup()中将它自己注册为数据库监听器。这样,一旦您实现了 onOpen()onCreate() 方法,您就可以像以前一样安装您的冲突策略。示例(未尝试):

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
}

然后在config/orientdb-server-config.xml文件中将其注册为处理程序:

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