2016-08-24 43 views
0

我正在使用以下邏輯在Orient DB中啓動事務。 graphFactory.getDatabase().begin(type); 我在觀察的是如果事務沒有在方法內部關閉,它是自動可用的其他方法,這似乎泄漏給我。我會盡量解釋下面的場景:Orient DB中的事務管理DB

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 
    } 

我有一個更新的另一種方法

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 
    } 

圖形工廠有以下屬性設置

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

後市展望:updateVertexToDB應該拋出OTransactionException e 目前的行爲:它通過保存和正常工作來獲得transcation。

所以,只是想知道如何實現這樣的行爲,如果一個方法沒有啓動transcation並試圖寫入DB,它必須拋出OTransactionException e,直到它不嵌套在已經運行事務的方法中。

回答

0

我認爲這是我驗證交易的方式。我在同一個Junit類中編寫了這兩個方法測試,它們是由同一個線程(main)運行的。因此交易被分享。 我交叉驗證,通過在第二個方法中產生新線程並嘗試寫入數據庫並引發異常。

1

什麼是graphFactory?這個名字是誤導性的。它看起來不像OrientGraphFactory,而是一個OrientGraph對象,對吧?

無論如何,撥打電話graphFactory.getDatabase().begin(OTransaction.TXTYPE.OPTIMISTIC);您將繞過GraphAPI。如果您使用Graph API,則行爲應該是預期的行爲。嘗試撥打電話graphFactory.begin();

+0

OrientGraphFactory沒有任何公開的方法稱爲begin(); – Krishna