We could not trace down where this would be happening, we came to later find out that YourKit was not telling us exactly what we thought it was - and we were able to demonstrate this with a simple test.
We wrote a very simple java app that opened a connection slept for a period of time - then closed the connection. While the java app was up and running - there should have been 1 connection open - the profiler said there were 0 connections open. This appears to be a bug in Yourkit - has anyone else seen this?
This was the simple example we used
Code: Select all
package _connectionTest;
//STEP 1. Import required packages
import java.sql.*;
import java.util.Properties;
import oracle.jdbc.pool.OracleDataSource;
public class connectionTest {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
static final String DB_URL = "jdbc:oracle:thin:@192.168.56.103:1521:sid";
// Database credentials
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) throws Exception {
OracleDataSource dataSource = new OracleDataSource();
Properties props = new Properties();
dataSource.setURL(DB_URL);
dataSource.setUser(USER);
dataSource.setPassword(PASS);
dataSource.setConnectionCachingEnabled(true);
Connection conn = null;
Statement stmt = null;
try {
// STEP 2: Register JDBC driver
// Class.forName("oracle.jdbc.driver.OracleDriver");
// STEP 3: Open a connection
System.out.println("Connecting to database...");
// conn = DriverManager.getConnection(DB_URL, USER, PASS);
conn = dataSource.getConnection();
// STEP 4: Execute a query
System.out.println("Creating database...");
stmt = conn.createStatement();
String sql = "CREATE TABLE JW as select 2 from dual";
stmt.executeUpdate(sql);
Thread.sleep(500 * 1000);
System.out.println("Database created successfully...");
} catch (SQLException se) {
// Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}// end finally try
}// end try
System.out.println("Goodbye!");
}// end main
}// end JDBCExample