re base code
[sdc.git] / catalog-dao / src / main / java / org / openecomp / sdc / be / dao / titan / transactions / SimpleTitanTransactionManager.java
1 package org.openecomp.sdc.be.dao.titan.transactions;
2
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;
14
15 import javax.annotation.PostConstruct;
16
17 /**
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
20  */
21 @Component
22 public class SimpleTitanTransactionManager implements PlatformTransactionManager {
23
24     private static final Logger log = Logger.getLogger(SimpleTitanTransactionManager.class.getName());
25     private final TitanGraphClient titanClient;
26     private TitanGraph titanGraph;
27
28     public SimpleTitanTransactionManager(TitanGraphClient titanClient) {
29         this.titanClient = titanClient;
30     }
31
32     @PostConstruct
33     public void onInit() {
34         titanGraph = titanClient.getGraph().left().on(this::onFailingToStartTitan);
35     }
36
37     @Override
38     public TransactionStatus getTransaction(TransactionDefinition transactionDefinition) {
39         log.debug("#getTransaction - returning simple transaction status");
40         return new SimpleTransactionStatus();
41     }
42
43     @Override
44     public void commit(TransactionStatus transactionStatus) {
45         log.debug("#commit - committing transaction");
46         try {
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);
51         }
52     }
53
54     @Override
55     public void rollback(TransactionStatus transactionStatus) {
56         log.debug("#rollback - committing transaction");
57         try {
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);
62         }
63     }
64
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);
68     }
69
70 }