1 21 22 package org.apache.derbyTesting.functionTests.tests.lang; 23 24 import java.sql.Connection ; 25 import java.sql.Statement ; 26 import java.sql.ResultSet ; 27 import java.sql.ResultSetMetaData ; 28 import java.sql.DriverManager ; 29 import org.apache.derby.tools.ij; 30 31 34 public class simpleThread implements Runnable { 35 36 private static Connection _connection = null; 37 private static boolean _inUse = false; 38 private static Object _lock = new Object (); 39 40 private long _wait = 0; 41 private long _myCount = 0; 42 private static int _count = 0; 43 private synchronized static int getCount() { return(_count++); } 44 private String _query; 45 46 public simpleThread( String query, long waitTime) { 47 _wait = waitTime; 48 _myCount = getCount(); 49 _query = query; 50 new Thread (this).start(); 51 } 52 53 public void run() { 54 int rows = 0; 55 boolean caught = false; 56 try { 57 Thread.currentThread().sleep(_wait); 58 Connection conn = GetConnection(); 59 Statement stmt = conn.createStatement(); 60 String query = _query; 61 ResultSet rs = stmt.executeQuery( query ); 62 ResultSetMetaData rsmd = rs.getMetaData(); 63 while(rs.next()) { 65 rows++; 66 } 74 stmt.close(); 75 ReturnConnection(conn); 76 } catch (Exception ex) { 77 caught = true; 79 } 80 if (rows == 3 || caught) 81 { 82 } 84 else 85 { 86 System.out.println("FAIL: thread "+_myCount+" only got "+rows+" rows and caught was "+caught); 87 } 88 } 89 90 91 public simpleThread(String argv[]) throws Exception { 92 93 ij.getPropertyArg(argv); 94 _connection = ij.startJBMS(); 95 96 Connection conn = GetConnection(); 97 98 Statement stmt = conn.createStatement(); 99 100 stmt.execute("create table people(name varchar(255), address varchar(255), phone varchar(64))"); 101 stmt.execute("insert into people VALUES ('mike', 'mikes address', '123-456-7890')"); 102 stmt.execute("insert into people VALUES ('adam', 'adams address', '123-456-1234')"); 103 stmt.execute("insert into people VALUES ('steve', 'steves address', '123-456-4321')"); 104 stmt.close(); 105 106 ReturnConnection(conn); 107 108 String query = "SELECT * from people ORDER by name"; 109 110 try { 111 String [] retval = new String [4]; 112 new simpleThread(query,0); 113 new simpleThread(query,10000); 114 new simpleThread(query,10100); 115 new simpleThread(query,20000); 116 } catch (Exception ex) { 117 System.err.println(ex.toString() ); 118 } 119 } 120 121 public static Connection GetConnection() { 122 synchronized(_lock) { 123 _inUse = true; 124 } 125 return _connection; 126 } 127 public static void ReturnConnection(Connection c) { 128 synchronized(_lock) { 129 _inUse = false; 130 _lock.notifyAll(); 131 } 132 } 133 } 134 | Popular Tags |