Revision 5261131c
Added by Andreas Kohlbecker about 5 years ago
src/main/java/eu/etaxonomy/cdm/service/CdmStore.java | ||
---|---|---|
64 | 64 |
*/ |
65 | 65 |
public <T extends CdmBase> T mergedBean(T bean) throws IllegalStateException { |
66 | 66 |
|
67 |
TransactionStatus txStatus = repo.startTransaction(); |
|
68 |
Session session = repo.getSession(); |
|
69 |
|
|
70 |
if (session.contains(bean)) { |
|
71 |
// evict bean before merge to avoid duplicate beans in same session |
|
72 |
logger.trace(this._toString() + ".mergedBean() - evict " + bean.toString()); |
|
73 |
session.evict(bean); |
|
67 |
try{ |
|
68 |
TransactionStatus txStatus = repo.startTransaction(); |
|
69 |
Session session = repo.getSession(); |
|
70 |
try { |
|
71 |
if (session.contains(bean)) { |
|
72 |
// evict bean before merge to avoid duplicate beans in same session |
|
73 |
logger.trace(this._toString() + ".mergedBean() - evict " + bean.toString()); |
|
74 |
session.evict(bean); |
|
75 |
} |
|
76 |
logger.trace(this._toString() + ".mergedBean() - doing merge of" + bean.toString()); |
|
77 |
@SuppressWarnings("unchecked") |
|
78 |
T mergedBean = (T) session.merge(bean); |
|
79 |
session.flush(); |
|
80 |
repo.commitTransaction(txStatus); |
|
81 |
logger.trace(this._toString() + ".mergedBean() - bean after merge " + bean.toString()); |
|
82 |
return mergedBean; |
|
83 |
} catch(Exception e){ |
|
84 |
repo.getTransactionManager().rollback(txStatus); |
|
85 |
throw e; |
|
86 |
} |
|
87 |
} finally { |
|
88 |
repo.clearSession(); // #7559 |
|
74 | 89 |
} |
75 |
|
|
76 |
logger.trace(this._toString() + ".mergedBean() - doing merge of" + bean.toString()); |
|
77 |
@SuppressWarnings("unchecked") |
|
78 |
T mergedBean = (T) session.merge(bean); |
|
79 |
session.flush(); |
|
80 |
repo.commitTransaction(txStatus); |
|
81 |
logger.trace(this._toString() + ".mergedBean() - bean after merge " + bean.toString()); |
|
82 |
return mergedBean; |
|
83 |
|
|
84 | 90 |
} |
85 | 91 |
|
86 | 92 |
|
... | ... | |
103 | 109 |
} else { |
104 | 110 |
changeEventType = Type.CREATED; |
105 | 111 |
} |
106 |
|
|
107 |
TransactionStatus txStatus = repo.startTransaction(); |
|
108 |
Session session = repo.getSession(); |
|
109 |
logger.trace(this._toString() + ".onEditorSaveEvent - merging bean into session"); |
|
110 |
// merge the changes into the session, ... |
|
111 |
T mergedBean = mergedBean(bean); |
|
112 |
session.flush(); |
|
113 |
repo.commitTransaction(txStatus); |
|
114 |
return new EntityChangeEvent(mergedBean, changeEventType, view); |
|
112 |
|
|
113 |
try{ |
|
114 |
TransactionStatus txStatus = repo.startTransaction(); |
|
115 |
Session session = repo.getSession(); |
|
116 |
try { |
|
117 |
logger.trace(this._toString() + ".onEditorSaveEvent - merging bean into session"); |
|
118 |
// merge the changes into the session, ... |
|
119 |
T mergedBean = mergedBean(bean); |
|
120 |
session.flush(); |
|
121 |
repo.commitTransaction(txStatus); |
|
122 |
return new EntityChangeEvent(mergedBean, changeEventType, view); |
|
123 |
} catch(Exception e){ |
|
124 |
repo.getTransactionManager().rollback(txStatus); |
|
125 |
throw e; |
|
126 |
} |
|
127 |
} finally { |
|
128 |
repo.clearSession(); // #7559 |
|
129 |
} |
|
115 | 130 |
|
116 | 131 |
} |
117 | 132 |
|
... | ... | |
124 | 139 |
|
125 | 140 |
IService<T> typeSpecificService = serviceFor(bean); |
126 | 141 |
|
127 |
logger.trace(this._toString() + ".onEditorPreSaveEvent - starting transaction");
|
|
128 |
TransactionStatus txStatus = repo.startTransaction();
|
|
129 |
Session session = repo.getSession();
|
|
130 |
logger.trace(this._toString() + ".deleteBean - deleting" + bean.toString());
|
|
131 |
DeleteResult result = typeSpecificService.delete(bean);
|
|
132 |
if (result.isOk()) {
|
|
133 |
session.flush();
|
|
134 |
repo.commitTransaction(txStatus);
|
|
135 |
logger.trace(this._toString() + ".deleteBean - transaction comitted");
|
|
136 |
return new EntityChangeEvent(bean, Type.REMOVED, view);
|
|
137 |
} else {
|
|
138 |
handleDeleteresultInError(result);
|
|
142 |
try{
|
|
143 |
Session session = repo.getSession();
|
|
144 |
logger.trace(this._toString() + ".deleteBean - deleting" + bean.toString());
|
|
145 |
DeleteResult result = typeSpecificService.delete(bean);
|
|
146 |
if (result.isOk()) {
|
|
147 |
session.flush();
|
|
148 |
return new EntityChangeEvent(bean, Type.REMOVED, view);
|
|
149 |
} else {
|
|
150 |
handleDeleteresultInError(result);
|
|
151 |
}
|
|
152 |
} finally {
|
|
153 |
repo.clearSession(); // #7559
|
|
139 | 154 |
} |
140 | 155 |
|
141 | 156 |
return null; |
Also available in: Unified diff
ref #8132 proper transaction rollback in CdmStore - copied from hfx branch