01: /*
02: * hgcommons 7
03: * Hammurapi Group Common Library
04: * Copyright (C) 2003 Hammurapi Group
05: *
06: * This program is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * URL: http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/products/hgcommons/index.html
21: * e-Mail: support@hammurapi.biz
22: */
23: package biz.hammurapi.sql.xml;
24:
25: import java.sql.Connection;
26: import java.sql.SQLException;
27:
28: import org.w3c.dom.Element;
29: import org.w3c.dom.Node;
30:
31: import biz.hammurapi.config.ConfigurationException;
32: import biz.hammurapi.config.Context;
33: import biz.hammurapi.config.PropertyParser;
34: import biz.hammurapi.sql.SQLProcessor;
35:
36: /**
37: * @author Pavel Vlasov
38: * @version $Revision: 1.2 $
39: */
40: public class Transaction extends CompositeCommand {
41:
42: private String errorMessage;
43:
44: public void configure(Node configNode, Context context)
45: throws ConfigurationException {
46: super .configure(configNode, context);
47: Element configElement = (Element) configNode;
48:
49: if (configElement.hasAttribute("error-message")) {
50: errorMessage = configElement.getAttribute("error-message");
51: }
52:
53: }
54:
55: public void execute(Element holder, SQLProcessor processor,
56: final Context context) throws SQL2XMLException {
57: try {
58: Connection connection = processor.getConnection();
59: boolean autoCommit = connection.getAutoCommit();
60: try {
61: connection.setAutoCommit(false);
62: super .execute(holder,
63: new SQLProcessor(connection, null), context);
64: connection.commit();
65: } catch (SQLException e) {
66: connection.rollback();
67: throw e;
68: } catch (SQL2XMLException e) {
69: connection.rollback();
70: throw e;
71: } catch (RuntimeException e) {
72: connection.rollback();
73: throw e;
74: } finally {
75: connection.setAutoCommit(autoCommit);
76: connection.close();
77: }
78: } catch (final SQLException e) {
79: throw new SQL2XMLException(new PropertyParser(
80: new Context() {
81: public Object get(String name) {
82: if ("error.message".equals(name)) {
83: return e.getMessage();
84: } else if ("error.class".equals(name)) {
85: return e.getClass().getName();
86: } else {
87: return context.get(name);
88: }
89: }
90: }, false).parse(errorMessage), e);
91: }
92: }
93: }
|