final void closeChildWrappers ( ) { TraceComponent tc = getTracer ( ) ; final boolean isTraceOn = TraceComponent . isAnyTracingEnabled ( ) ; // Close any child wrappers in the child wrapper list. if ( childWrappers != null && ! childWrappers . isEmpty ( ) ) { if ( isTraceOn && tc . isDebugEnabled ( ) ) Tr . debug ( this , tc , "Closing child wrappers" ) ; WSJdbcObject wrapper = null ; // Children remove themselves from the childWrappers list as they are closed. for ( int i = childWrappers . size ( ) ; i > 0 ; ) try { wrapper = ( WSJdbcObject ) childWrappers . get ( -- i ) ; wrapper . close ( ) ; } catch ( SQLException closeX ) // can't fail here, need to keep closing { FFDCFilter . processException ( closeX , "com.ibm.ws.rsadapter.jdbc.WSJdbcObject.closeChildWrappers" , "554" , this ) ; } catch ( IndexOutOfBoundsException ioobX ) { if ( isTraceOn && tc . isDebugEnabled ( ) ) { Tr . debug ( this , tc , "ArrayIndexOutOfBoundsException is caught during closeChildWrappers() of the WSJdbcObject" ) ; Tr . debug ( this , tc , "Possible causes:" ) ; Tr . debug ( this , tc , "multithreaded access of JDBC objects by the Application" ) ; Tr . debug ( this , tc , "Application is closing JDBC objects in a finalize()" ) ; Tr . debug ( this , tc , "Exception is: " , ioobX ) ; } throw ioobX ; } } // Close this object's single child wrapper, if one exists. if ( childWrapper != null ) try { if ( isTraceOn && tc . isDebugEnabled ( ) ) Tr . debug ( this , tc , "Closing child wrapper" ) ; childWrapper . close ( ) ; } catch ( SQLException closeX ) { FFDCFilter . processException ( closeX , "com.ibm.ws.rsadapter.jdbc.WSJdbcObject.closeChildWrappers" , "573" , this ) ; } }
Close all child objects of this wrapper . Errors that occur while closing child objects should not be thrown . Errors may be logged instead .