Я пытаюсь создать тупик базы данных и использую JUnit. У меня есть два параллельных теста, которые оба обновляют одну и ту же строку в таблице снова и снова в цикле.
Моя идея состоит в том, что вы обновляете, скажем, строку A в таблице A, а затем строку B в таблице B снова и снова в одном тесте. Затем в то же время вы обновляете строку B таблицы B, а затем строки A таблицы A снова и снова. Насколько я понимаю, это должно в конечном итоге привести к тупику.
Вот код для первого теста.
public static void testEditCC()
{
try{
int rows = 0;
int counter = 0;
int large=10000000;
Connection c=DataBase.getConnection();
while(counter<large)
{
int pid = 87855;
int cCode = 655;
String newCountry="Egypt";
int bpl = 0;
stmt = c.createStatement();
rows = stmt.executeUpdate("UPDATE main " + //create lock on main table
"SET BPL="+cCode+
"WHERE ID="+pid);
rows = stmt.executeUpdate("UPDATE BPL SET DESCRIPTION='SomeWhere' WHERE ID=602"); //create lock on bpl table
counter++;
}
assertTrue(rows == 1);
//rows = stmt.executeUpdate("Insert into BPL (ID, DESCRIPTION) VALUES ("+cCode+", '"+newCountry+"')");
}
catch(SQLException ex)
{
ex.printStackTrace();
//ex.getMessage();
}
}
А вот код для второго теста.
public static void testEditCC()
{
try{
int rows = 0;
int counter = 0;
int large=10000000;
Connection c=DataBase.getConnection();
while(counter<large)
{
int pid = 87855;
int cCode = 655;
String newCountry="Jordan";
int bpl = 0;
stmt = c.createStatement();
//stmt.close();
rows = stmt.executeUpdate("UPDATE BPL SET DESCRIPTION='SomeWhere' WHERE ID=602"); //create lock on bpl table
rows = stmt.executeUpdate("UPDATE main " + //create lock on main table
"SET BPL="+cCode+
"WHERE ID="+pid);
counter++;
}
assertTrue(rows == 1);
//rows = stmt.executeUpdate("Insert into BPL (ID, DESCRIPTION) VALUES ("+cCode+", '"+newCountry+"')");
}
catch(SQLException ex)
{
ex.printStackTrace();
}
}
Я запускаю эти два отдельных теста JUnit одновременно и подключаюсь к базе данных Apache Derby, которую я запускаю в сетевом режиме в Eclipse. Может ли кто-нибудь помочь мне понять, почему не возникает тупик? Возможно, я неправильно использую JUnit.