	@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);
			}
		}
	}