1 package org.openecomp.sdc.be.dao.titan.transactions;
3 import com.thinkaurelius.titan.core.TitanException;
4 import com.thinkaurelius.titan.core.TitanGraph;
5 import org.openecomp.sdc.be.dao.titan.TitanGraphClient;
6 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
7 import org.openecomp.sdc.common.log.wrappers.Logger;
8 import org.springframework.stereotype.Component;
9 import org.springframework.transaction.PlatformTransactionManager;
10 import org.springframework.transaction.TransactionDefinition;
11 import org.springframework.transaction.TransactionStatus;
12 import org.springframework.transaction.TransactionSystemException;
13 import org.springframework.transaction.support.SimpleTransactionStatus;
15 import javax.annotation.PostConstruct;
18 * Simple transaction manager for the titan database.
19 * This manager does not deal with transactions propagation and relies on the fact that transactions are automatically created with the first operation on the graph
22 public class SimpleTitanTransactionManager implements PlatformTransactionManager {
24 private static final Logger log = Logger.getLogger(SimpleTitanTransactionManager.class.getName());
25 private final TitanGraphClient titanClient;
26 private TitanGraph titanGraph;
28 public SimpleTitanTransactionManager(TitanGraphClient titanClient) {
29 this.titanClient = titanClient;
33 public void onInit() {
34 titanGraph = titanClient.getGraph().left().on(this::onFailingToStartTitan);
38 public TransactionStatus getTransaction(TransactionDefinition transactionDefinition) {
39 log.debug("#getTransaction - returning simple transaction status");
40 return new SimpleTransactionStatus();
44 public void commit(TransactionStatus transactionStatus) {
45 log.debug("#commit - committing transaction");
47 titanGraph.tx().commit();
48 } catch (TitanException e) {
49 log.debug("#commit - failed to commit transaction", e);
50 throw new TransactionSystemException("failed to commit transaction", e);
55 public void rollback(TransactionStatus transactionStatus) {
56 log.debug("#rollback - committing transaction");
58 titanGraph.tx().rollback();
59 } catch (TitanException e) {
60 log.debug("#rollback - failed to rollback transaction", e);
61 throw new TransactionSystemException("failed to rollback transaction", e);
65 private TitanGraph onFailingToStartTitan(TitanOperationStatus err) {
66 log.debug("#onFailingToStartTitan - could not open titan client");
67 throw new IllegalStateException("titan could not be initialized: " + err);