@Override
    public void free() {
        try {
        if(hasCoreConnection()) {
            this.getCoreConnection().close();
        }
        this.fireConnectionFreed();
        this.boundThreadId= Thread.currentThread().getId();

    } finally {
        this.setClosed(true);
        // state may be important for State-Listener, so its set after the listener did their work
        setTransactionalData(false);

        // re-opem is not possible
        // this.connection=null;
        this.releaseThreadBinding();
    }

    }
@ Override public void free ( ) { try { if ( hasCoreConnection ( ) ) { this . getCoreConnection ( ) . close ( ) ; } this . fireConnectionFreed ( ) ; this . boundThreadId = Thread . currentThread ( ) . getId ( ) ; } finally { this . setClosed ( true ) ; setTransactionalData ( false ) ; this . releaseThreadBinding ( ) ; } }
marks a connection a freed. This connection won't be used any more.

The connection is released from the bound thread an can be bind to an other thread

The thread binding is not checked as this method is called in emergency and has to be robust