2016-08-24 14 views
0

以下のロジックを使用してオリエンテーションDBでトランザクションを開始しています。 graphFactory.getDatabase().begin(type); 私が観察しているのは、トランザクションがメソッド内で閉じられていない場合です。他のメソッドでは自動的に利用可能です。 updateVertexToDBはOTransactionException e をスローする必要があります:私は、グラフの工場は、プロパティの下オリエントDBのトランザクション管理

graphFactory.setAutoStartTx(false); 
graphFactory.setRequireTransaction(true); 

期待を設定した更新

のような別の方法
public <T> void updateVertexToDB(T data){ 
    //not starting the transaction explicitly and doing some write operation 
    //logic for fetching data and adding vertex 
    //I am neither calling rollback nor commit here 
    } 

を持って

public <T> void addVertexToDB(T data){ 
    graphFactory.getDatabase().begin(OTransaction.TXTYPE.OPTIMISTIC); 
    //logic for fetching data and adding vertex 
    //I am neither calling rollback nor commit here 
    } 

:私は下のシナリオを説明しようとします現在の動作:保存して正常に動作することによって、変換が開始されます。

これはちょうど知りたかったのですが、メソッドがトランスアクションを開始せずにDBに書き込もうとしている場合、すでにトランザクションを実行しているメソッドの中にネストされていない限り、OTransactionException eをスローする必要があります。

答えて

0

私はトランザクションを確認していたと思います。同じJunitクラスの中でこれらの2つのメソッドテストを書いていますが、これは同じスレッド(main)で実行されています。したがって、トランザクションは共有されました。 2番目のメソッドで新しいスレッドを生成し、データベースに書き込もうとすると、その例外がスローされます。

1

graphFactoryとは名前は誤解を招く。 OrientGraphFactoryのようには見えませんが、OrientGraphオブジェクトのようです。

とにかく、graphFactory.getDatabase().begin(OTransaction.TXTYPE.OPTIMISTIC);という名前でGraphAPIをバイパスしています。グラフAPIを使用する場合、動作は期待どおりのものでなければなりません。 graphFactory.begin();

+0

OrientGraphFactoryにはbegin()という公開メソッドがありません。 – Krishna

関連する問題