/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.unit;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.constant.ErrorCode;
import org.h2.test.TestBase;
import org.h2.util.Task;
/**
* Test concurrent access to JDBC objects.
*/
public class TestConcurrent extends TestBase {
/**
* Run just this test.
*
* @param a ignored
*/
public static void main(String... a) throws Exception {
TestBase.createCaller().init().test();
}
public void test() throws Exception {
String url = "jdbc:h2:mem:";
for (int i = 0; i < 50; i++) {
final int x = i % 4;
final Connection conn = DriverManager.getConnection(url);
final Statement stat = conn.createStatement();
stat.execute("create table test(id int primary key)");
String sql = "";
switch (x % 6) {
case 0:
sql = "select 1";
break;
case 1:
case 2:
sql = "delete from test";
break;
}
final PreparedStatement prep = conn.prepareStatement(sql);
Task t = new Task() {
public void call() throws SQLException {
while (!conn.isClosed()) {
switch (x % 6) {
case 0:
prep.executeQuery();
break;
case 1:
prep.execute();
break;
case 2:
prep.executeUpdate();
break;
case 3:
stat.executeQuery("select 1");
break;
case 4:
stat.execute("select 1");
break;
case 5:
stat.execute("delete from test");
break;
}
}
}
};
t.execute();
Thread.sleep(100);
conn.close();
SQLException e = (SQLException) t.getException();
if (e != null) {
if (ErrorCode.OBJECT_CLOSED != e.getErrorCode() &&
ErrorCode.STATEMENT_WAS_CANCELED != e.getErrorCode()) {
throw e;
}
}
}
}
}