1
2
3
4
5
6 package org.weda.hibernate;
7
8 import java.sql.Savepoint;
9 import java.util.Stack;
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.hibernate.HibernateException;
13 import org.hibernate.Session;
14 import org.hibernate.Transaction;
15 import org.weda.cache.CacheEntity;
16
17 /**
18 *
19 * @author tim
20 */
21 public class HibernateCacheEntity implements CacheEntity {
22 private final static Log log = LogFactory.getLog(HibernateCacheEntity.class);
23 private Session session = null;
24 private int callCounter = 0;
25 private boolean endTransactionError = false;
26 private Stack<Savepoint> savepoints = new Stack<Savepoint>();
27 private boolean supportsSavepoint;
28 private boolean supportsReleaseSavepoint;
29
30 public void release() {
31 if (log.isDebugEnabled())
32 log.debug("Releasing hibernate session cache entity");
33 try{
34 if (session!=null){
35 if (log.isDebugEnabled())
36 log.debug(
37 "Cache entity has active session. " +
38 "Closing hibernate session");
39 Transaction tx = session.getTransaction();
40 if (tx!=null && tx.isActive()){
41 if (log.isDebugEnabled())
42 log.debug(
43 "Cache entity has active transaction. " +
44 "Rolling back transaction");
45 tx.rollback();
46 }
47 session.close();
48 }
49 }catch(HibernateException e){
50 log.error(
51 "Error while releasing hibernate session cache entity", e);
52 }
53 }
54
55 public Object getValue() {
56 return session;
57 }
58
59 public void setSession(Session session) {
60 this.session = session;
61 }
62
63 public Session getSession() {
64 return session;
65 }
66
67 public int getCallCounter() {
68 return callCounter;
69 }
70
71 public void setCallCounter(int callCounter) {
72 this.callCounter = callCounter;
73 }
74
75 public boolean isEndTransactionError() {
76 return endTransactionError;
77 }
78
79 public void setEndTransactionError(boolean endTransactionError) {
80 this.endTransactionError = endTransactionError;
81 }
82
83 public Stack<Savepoint> getSavepoints() {
84 return savepoints;
85 }
86
87 public void setSavepoints(Stack<Savepoint> savepoints) {
88 this.savepoints = savepoints;
89 }
90
91 public boolean isSupportsSavepoint() {
92 return supportsSavepoint;
93 }
94
95 public void setSupportsSavepoint(boolean supportsSavepoint) {
96 this.supportsSavepoint = supportsSavepoint;
97 }
98
99 public boolean isSupportsReleaseSavepoint() {
100 return supportsReleaseSavepoint;
101 }
102
103 public void setSupportsReleaseSavepoint(boolean supportsReleaseSavepoint) {
104 this.supportsReleaseSavepoint = supportsReleaseSavepoint;
105 }
106
107 }