Hazelcast C++ Client
TransactionContext.h
1 /*
2  * Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 //
17 // Created by sancar koyunlu on 8/5/13.
18 #ifndef HAZELCAST_TransactionContext
19 #define HAZELCAST_TransactionContext
20 
21 #include "hazelcast/client/TransactionOptions.h"
22 #include "hazelcast/client/txn/TransactionProxy.h"
23 #include "hazelcast/client/TransactionalMap.h"
24 #include "hazelcast/client/exception/IllegalStateException.h"
25 #include "hazelcast/client/TransactionalQueue.h"
26 #include "hazelcast/client/TransactionalMultiMap.h"
27 #include "hazelcast/client/TransactionalList.h"
28 #include "hazelcast/client/TransactionalSet.h"
29 
30 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
31 #pragma warning(push)
32 #pragma warning(disable: 4251) //for dll export
33 #endif
34 
35 namespace hazelcast {
36  namespace client {
37  namespace spi {
38  namespace impl {
39  class ClientTransactionManagerServiceImpl;
40  }
41  }
42 
43  namespace connection {
44  class ClientConnectionManagerImpl;
45  class Connection;
46  }
47 
54  class HAZELCAST_API TransactionContext {
55  public:
60  TransactionContext(spi::impl::ClientTransactionManagerServiceImpl &transactionManager, const TransactionOptions &);
64  std::string getTxnId() const;
65 
71  void beginTransaction();
72 
78  void commitTransaction();
79 
85  void rollbackTransaction();
86 
95  template<typename K, typename V>
96  TransactionalMap<K, V> getMap(const std::string &name) {
97  return getTransactionalObject< TransactionalMap<K, V> >(name);
98  }
99 
107  template<typename E>
108  TransactionalQueue< E > getQueue(const std::string &name) {
109  return getTransactionalObject< TransactionalQueue< E > >(name);
110  }
111 
119  template<typename K, typename V>
120  TransactionalMultiMap<K, V> getMultiMap(const std::string &name) {
121  return getTransactionalObject< TransactionalMultiMap<K, V> >(name);
122  }
123 
131  template<typename E>
132  TransactionalList< E > getList(const std::string &name) {
133  return getTransactionalObject< TransactionalList< E > >(name);
134  }
135 
143  template<typename E>
144  TransactionalSet< E > getSet(const std::string &name) {
145  return getTransactionalObject< TransactionalSet< E > >(name);
146  }
147 
155  template<typename T>
156  T getTransactionalObject(const std::string &name) {
157  if (transaction.getState() != txn::TxnState::ACTIVE) {
158  std::string message = "No transaction is found while accessing ";
159  message += "transactional object -> [" + name + "]!";
160  throw exception::IllegalStateException("TransactionContext::getMap(const std::string& name)", message);
161  }
162  T txnObject(name, &transaction);
163  return txnObject;
164  }
165 
166  private :
167  TransactionOptions options;
168  boost::shared_ptr<connection::Connection> txnConnection;
169  txn::TransactionProxy transaction;
170  };
171 
172  }
173 }
174 
175 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
176 #pragma warning(pop)
177 #endif
178 
179 #endif //HAZELCAST_TransactionContext
180 
Contains the configuration for a Hazelcast transaction.
Definition: TransactionOptions.h:67
TransactionalList< E > getList(const std::string &name)
Returns the transactional list instance with the specified name.
Definition: TransactionContext.h:132
TransactionalMap< K, V > getMap(const std::string &name)
Returns the transactional distributed map instance with the specified name.
Definition: TransactionContext.h:96
T getTransactionalObject(const std::string &name)
get any transactional object with template T.
Definition: TransactionContext.h:156
Transactional implementation of IMap.
Definition: TransactionalMap.h:44
Transactional implementation of MultiMap.
Definition: TransactionalMultiMap.h:40
Transactional implementation of IList.
Definition: TransactionalList.h:30
Transactional implementation of ISet.
Definition: TransactionalSet.h:34
TransactionalSet< E > getSet(const std::string &name)
Returns the transactional set instance with the specified name.
Definition: TransactionContext.h:144
TransactionalMultiMap< K, V > getMultiMap(const std::string &name)
Returns the transactional multimap instance with the specified name.
Definition: TransactionContext.h:120
TransactionalQueue< E > getQueue(const std::string &name)
Returns the transactional queue instance with the specified name.
Definition: TransactionContext.h:108
PN (Positive-Negative) CRDT counter.
Definition: MapEntryView.h:32
Transactional implementation of IQueue.
Definition: TransactionalQueue.h:38
Provides a context to do transactional operations; so beginning/committing transactions, but also retrieving transactional data-structures like the TransactionalMap.
Definition: TransactionContext.h:54