@Test
public void testFinalizerException2() throws SQLException, InterruptedException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{

	ConnectionHandle mockConnectionHandle = createNiceMock(ConnectionHandle.class); 
	expect(mockConnectionHandle.isInReplayMode()).andReturn(true).anyTimes();
	Connection mockConnection = createNiceMock(Connection.class);
	Connection connection = new MemorizeTransactionProxyDummy(null,null).memorizeDummy(mockConnection, mockConnectionHandle);
	expect(mockConnectionHandle.getInternalConnection()).andReturn(connection).anyTimes();
	makeThreadSafe(mockConnectionHandle, true);
	makeThreadSafe(mockConnection, true);
	mockLogger = TestUtils.mockLogger(testClass.getClass());
	
	reset(mockLogger);
	makeThreadSafe(mockLogger, true);
	reset(this.mockPool);
	Map<Connection, Reference<ConnectionHandle>> refs = new HashMap<Connection, Reference<ConnectionHandle>>();
	expect(this.mockPool.getFinalizableRefs()).andReturn(refs).anyTimes();
	FinalizableReferenceQueue finalizableRefQueue = new FinalizableReferenceQueue();
	expect(this.mockPool.getFinalizableRefQueue()).andReturn(finalizableRefQueue).anyTimes();
	expect(mockConnectionHandle.getPool()).andReturn(this.mockPool).anyTimes();

	replay(mockConnection, mockConnectionHandle, this.mockPool);

	testClass.trackConnectionFinalizer(mockConnectionHandle);
	reset(mockConnectionHandle);
	mockConnectionHandle = null; // prompt GC to kick in
	for (int i=0; i < 100; i++){
		System.gc();System.gc();System.gc();
		Thread.sleep(20);
		try{
			verify(mockConnection);
			break; // we succeeded
		} catch (Throwable t){
			t.printStackTrace();
			// do nothing, try again
			Thread.sleep(20);
		}
	}
}