东方数据库。设置 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>
我有 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>