All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
client-java.sources.src.test.org.firebirdsql.jdbc.TestBoundary Maven / Gradle / Ivy
package org.firebirdsql.jdbc;
import org.firebirdsql.common.FBTestBase;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class TestBoundary
extends FBTestBase {
final String CREATE_META_ONE = "CREATE TABLE COMMUNICATIONS_FIT ( \n" +
"ID INTEGER NOT NULL, \n" +
"GUIDID CHAR(16), \n" +
"NAME VARCHAR(64) CHARACTER SET ISO8859_1 COLLATE EN_UK, \n" +
"SDESC VARCHAR(256) CHARACTER SET ISO8859_1 COLLATE EN_UK, \n" +
"LDESC BLOB SUB_TYPE 1, \n" +
"STATUS INTEGER, \n" +
"PRIMARY KEY (ID) \n" +
") \n";
final String DROP_META_ONE = "DROP TABLE COMMUNICATIONS_FIT";
public TestBoundary(String testName) {
super(testName);
}
protected void setUp() throws Exception {
super.setUp();
Class.forName(FBDriver.class.getName());
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testLockUp() throws Exception {
Connection connection = getConnectionViaDriverManager();
try {
connection.setAutoCommit(false);
tryDrop(connection, DROP_META_ONE);
connection.commit();
final Statement stmnt = connection.createStatement();
try {
stmnt.executeUpdate(CREATE_META_ONE);
connection.commit();
} finally {
stmnt.close();
}
} finally {
connection.close();
}
final Results results = createResults();
final Thread thread = new Thread(new Runnable() {
public void run() {
try {
performLockupSequence();
results.setIsOk();
} catch (SQLException e) {
e.printStackTrace();
}
}
}, "Lockup test thread.");
thread.start();
// thread.run();
assertTrue("Operation should have completed by now", results
.waitForCompletionOrTimeout());
}
public void testNoLockUp() throws Exception {
Connection connection = getConnectionViaDriverManager();
try {
connection.setAutoCommit(false);
tryDrop(connection, DROP_META_ONE);
connection.commit();
final Statement stmnt = connection.createStatement();
try {
stmnt.executeUpdate(CREATE_META_ONE);
connection.commit();
}
finally {
stmnt.close();
}
} finally {
connection.close();
}
final Results results = createResults();
final Thread thread = new Thread(new Runnable() {
public void run() {
try {
performSimilarButNoLockupSequence();
results.setIsOk();
}
catch (SQLException e) {
e.printStackTrace(); // To change body of catch statement
// use Options | File Templates.
}
}
}
, "Lockup test thread.");
thread.start();
assertTrue("Operation should have completed by now",
results.waitForCompletionOrTimeout());
}
private synchronized Results createResults() {
return new Results();
}
class Results {
synchronized void setIsOk() {
isOk = true;
notifyAll();
}
synchronized boolean waitForCompletionOrTimeout() {
final long startTime =
System.currentTimeMillis();
while (isOk == false &&
(System.currentTimeMillis() - startTime) < 10000) {
try {
wait(10000);
}
catch (InterruptedException e) {
e.printStackTrace(); // To change body of catch statement
// use Options | File Templates.
}
}
return isOk;
}
private boolean isOk = false;
}
private void performLockupSequence() throws
SQLException {
Connection conn =
getConnectionViaDriverManager();
final PreparedStatement statement =
conn.prepareStatement("INSERT INTO COMMUNICATIONS_FIT ( \n " +
"GUIDID, \n" +
"NAME, \n" +
"SDESC, \n" +
"LDESC, \n" +
"STATUS, \n" +
"ID \n" +
") \n" +
"VALUES ( ?, ?, ?, ?, ?, ? ) \n");
statement.clearParameters();
byte[] guid = new byte[16];
for (int i = 0; i < guid.length; i++) {
guid[i] = (byte) (i + 65);
}
statement.setBytes(1, guid);
statement.setString(2, "Further");
statement.setString(3, "Further infomation field");
statement.setString(4, "Field to provide Further infomation capture");
statement.setInt(5, 2);
statement.setInt(6, 1);
statement.executeUpdate(); // <---- WE WILL LOCKL
conn.close();
}
private void performSimilarButNoLockupSequence() throws SQLException {
Connection conn =
getConnectionViaDriverManager();
final PreparedStatement statement =
conn.prepareStatement("INSERT INTO COMMUNICATIONS_FIT ( \n " +
// "GUIDID, \n" +
"NAME, \n" +
"SDESC, \n" +
"LDESC, \n" +
"STATUS, \n" +
"ID \n" +
") \n" +
"VALUES ( ?, ?, ?, ?, ? ) \n");
statement.clearParameters();
// statement.setBytes( 1, new byte[16] );
statement.setString(1, "Further");
statement.setString(2, "Further infomation field");
statement.setString(3, "Field to provide Further infomation capture");
statement.setInt(4, 2);
statement.setInt(5, 1);
statement.executeUpdate(); // <---- WE WILL LOCKL
conn.close();
}
private void tryDrop(Connection connection, String
sql) {
Statement stmt = null;
try {
stmt = connection.createStatement();
stmt.executeUpdate(sql);
}
catch (SQLException sqlex) {
// do nothing
}
finally {
if (stmt != null) {
try {
stmt.close();
}
catch (SQLException sqlex) {
// do nothing
}
}
}
}
}