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 package org.openrdf.elmo.sesame;
30
31 import javax.persistence.EntityTransaction;
32 import javax.persistence.PersistenceException;
33 import javax.persistence.RollbackException;
34
35 import org.openrdf.repository.RepositoryConnection;
36 import org.openrdf.repository.RepositoryException;
37
38
39
40
41
42
43
44 public class SesameTransaction implements EntityTransaction {
45
46 private RepositoryConnection conn;
47
48 private boolean rollbackOnly = false;
49
50 public SesameTransaction(RepositoryConnection conn) {
51 this.conn = conn;
52 }
53
54 public void begin() {
55 try {
56 if (isActive())
57 throw new IllegalStateException("Transaction already started");
58 conn.setAutoCommit(false);
59 } catch (RepositoryException e) {
60 throw new PersistenceException(e);
61 }
62 }
63
64 public void commit() {
65 try {
66 if (!isActive())
67 throw new IllegalStateException("Transaction has not been started");
68 conn.commit();
69 conn.setAutoCommit(true);
70 rollbackOnly = false;
71 } catch (RepositoryException e) {
72 throw new RollbackException(e);
73 }
74 }
75
76 public void rollback() {
77 try {
78 if (!isActive())
79 throw new IllegalStateException("Transaction has not been started");
80 conn.rollback();
81 conn.setAutoCommit(true);
82 rollbackOnly = false;
83 } catch (RepositoryException e) {
84 throw new PersistenceException(e);
85 }
86 }
87
88 public void setRollbackOnly() {
89 if (!isActive())
90 throw new IllegalStateException("Transaction has not been started");
91 rollbackOnly = true;
92 }
93
94 public boolean getRollbackOnly() {
95 if (!isActive())
96 throw new IllegalStateException("Transaction has not been started");
97 return rollbackOnly;
98 }
99
100 public boolean isActive() {
101 try {
102 return !conn.isAutoCommit();
103 } catch (RepositoryException e) {
104 throw new PersistenceException(e);
105 }
106 }
107
108 }