This repository has been archived by the owner on Jul 11, 2019. It is now read-only.
forked from immutant/immutant
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scope.clj
60 lines (53 loc) · 1.9 KB
/
scope.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
;; Copyright 2014-2017 Red Hat, Inc, and individual contributors.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
;; You may obtain a copy of the License at
;;
;; http://www.apache.org/licenses/LICENSE-2.0
;;
;; Unless required by applicable law or agreed to in writing, software
;; distributed under the License is distributed on an "AS IS" BASIS,
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
;; limitations under the License.
(ns immutant.transactions.scope
"Macros that control transaction scope, analagous to
[JEE transaction attributes](https://docs.oracle.com/javaee/7/tutorial/transactions003.htm)"
(:require [immutant.transactions :refer (tx)]))
(defmacro required
"JEE Required - execute within current transaction, if any,
otherwise run body in a new one"
[& body]
(let [f `(fn [] ~@body)]
`(.required (tx) ~f)))
(defmacro requires-new
"JEE RequiresNew - suspend current transaction, if any, and execute
body in a new one"
[& body]
(let [f `(fn [] ~@body)]
`(.requiresNew (tx) ~f)))
(defmacro not-supported
"JEE NotSupported - suspend current transaction, if any, and run
body without a transaction"
[& body]
(let [f `(fn [] ~@body)]
`(.notSupported (tx) ~f)))
(defmacro supports
"JEE Supports - run body regardless of current transaction
state (unpredictable)"
[& body]
(let [f `(fn [] ~@body)]
`(.supports (tx) ~f)))
(defmacro mandatory
"JEE Mandatory - throws an exception unless there's an active
transaction in which body will be run"
[& body]
(let [f `(fn [] ~@body)]
`(.mandatory (tx) ~f)))
(defmacro never
"JEE Never - throws an exception if there's an active transaction,
otherwise runs body"
[& body]
(let [f `(fn [] ~@body)]
`(.never (tx) ~f)))