KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > test > db > TestTwoPhaseCommit


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.test.db;
6
7 import java.sql.Connection JavaDoc;
8 import java.sql.ResultSet JavaDoc;
9 import java.sql.Statement JavaDoc;
10 import java.util.ArrayList JavaDoc;
11
12 import org.h2.test.TestBase;
13
14 public class TestTwoPhaseCommit extends TestBase {
15     public void test() throws Exception JavaDoc {
16         if(config.memory || config.networked || config.logMode==0) {
17             return;
18         }
19         
20         deleteDb("twoPhaseCommit");
21
22         prepare();
23         openWith(true);
24         test(true);
25         
26         prepare();
27         openWith(false);
28         test(false);
29     }
30     
31     void test(boolean rolledBack) throws Exception JavaDoc {
32         Connection JavaDoc conn = getConnection("twoPhaseCommit");
33         Statement JavaDoc stat = conn.createStatement();
34         stat.execute("SET WRITE_DELAY 0");
35         ResultSet JavaDoc rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID");
36         rs.next();
37         check(rs.getInt(1), 1);
38         check(rs.getString(2), "Hello");
39         if(rolledBack) {
40         } else {
41             rs.next();
42             check(rs.getInt(1), 2);
43             check(rs.getString(2), "World");
44         }
45         checkFalse(rs.next());
46         conn.close();
47     }
48     
49     void openWith(boolean rollback) throws Exception JavaDoc {
50         Connection JavaDoc conn = getConnection("twoPhaseCommit");
51         Statement JavaDoc stat = conn.createStatement();
52         ArrayList JavaDoc list = new ArrayList JavaDoc();
53         ResultSet JavaDoc rs = stat.executeQuery("SELECT * FROM INFORMATION_SCHEMA.IN_DOUBT");
54         while(rs.next()) {
55             list.add(rs.getString("TRANSACTION"));
56         }
57         for(int i=0; i<list.size(); i++) {
58             String JavaDoc s = (String JavaDoc)list.get(i);
59             if(rollback) {
60                 stat.execute("ROLLBACK TRANSACTION " + s);
61             } else {
62                 stat.execute("COMMIT TRANSACTION " + s);
63             }
64         }
65         conn.close();
66     }
67     
68     void prepare() throws Exception JavaDoc {
69         deleteDb("twoPhaseCommit");
70         Connection JavaDoc conn = getConnection("twoPhaseCommit");
71         Statement JavaDoc stat = conn.createStatement();
72         stat.execute("SET WRITE_DELAY 0");
73         conn.setAutoCommit(false);
74         stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
75         stat.execute("INSERT INTO TEST VALUES(1, 'Hello')");
76         conn.commit();
77         stat.execute("INSERT INTO TEST VALUES(2, 'World')");
78         stat.execute("PREPARE COMMIT XID_TEST_TRANSACTION_WITH_LONG_NAME");
79         crash(conn);
80     }
81 }
82
Popular Tags