2016-07-29 9 views
1

私はOObjectDatabaseTxを持っています。私はapiを使って私自身の紛争戦略を設定したい。OrientDB。例外を投げるConflictStrategyの設定

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] 

競合戦略を設定する方法はありますか?

+0

こんにちは@Nem、エラーを投稿することができますか? Thx事前に –

+0

確かに。私は例外を追加しました。 – Nem

答えて

2

これはクライアントで設定していますが、使用するサーバーであるためこれはできません。 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> 
+0

答え、@Lvcaありがとう!私は今試してみよう – Nem

関連する問題