/*
* 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 org.h2.test.TestBase;
/**
* Tests the multi-threaded kernel feature.
*/
public class TestMultiThreadedKernel extends TestBase implements Runnable {
private String url, user, password;
private int id;
private TestMultiThreadedKernel master;
private volatile boolean stop;
/**
* Run just this test.
*
* @param a ignored
*/
public static void main(String... a) throws Exception {
TestBase.createCaller().init().test();
}
public void test() throws Exception {
if (config.networked || config.mvcc) {
return;
}
deleteDb("multiThreadedKernel");
int count = getSize(2, 5);
Thread[] list = new Thread[count];
for (int i = 0; i < count; i++) {
TestMultiThreadedKernel r = new TestMultiThreadedKernel();
r.url = getURL("multiThreadedKernel;MULTI_THREADED=1", true);
r.user = getUser();
r.password = getPassword();
r.master = this;
r.id = i;
Thread thread = new Thread(r);
thread.setName("Thread " + i);
thread.start();
list[i] = thread;
}
Thread.sleep(getSize(2000, 5000));
stop = true;
for (int i = 0; i < count; i++) {
list[i].join();
}
deleteDb("multiThreadedKernel");
}
public void run() {
try {
org.h2.Driver.load();
Connection conn = DriverManager.getConnection(url + ";MULTI_THREADED=1;LOCK_MODE=3;WRITE_DELAY=0", user, password);
conn.createStatement().execute(
"CREATE TABLE TEST" + id + "(COL1 BIGINT AUTO_INCREMENT PRIMARY KEY, COL2 BIGINT)");
PreparedStatement prep = conn.prepareStatement("insert into TEST" + id + "(col2) values (?)");
for (int i = 0; !master.stop; i++) {
prep.setLong(1, i);
prep.execute();
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}