@ -6,7 +6,7 @@ package com.fr.design.data.datapane.connect;
import com.fr.data.impl.Connection ;
import com.fr.data.impl.JDBCDatabaseConnection ;
import com.fr.data.impl.JNDIDatabaseConnection ;
import com.fr.data.operator.DataOperator ;
import com.fr.data.operator.DataOperatorProvider ;
import com.fr.data.solution.ExceptionSolutionSelector ;
import com.fr.data.solution.entity.DriverPage ;
import com.fr.data.solution.processor.ClassNotFoundExceptionSolutionProcessor ;
@ -22,9 +22,12 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.scrollruler.ModLineBorder ;
import com.fr.design.utils.gui.GUICoreUtils ;
import com.fr.log.FineLoggerFactory ;
import com.fr.rpc.ExceptionHandler ;
import com.fr.rpc.RPCInvokerExceptionInfo ;
import com.fr.stable.ArrayUtils ;
import com.fr.stable.EncodeConstants ;
import com.fr.stable.StringUtils ;
import com.fr.workspace.WorkContext ;
import javax.swing.BorderFactory ;
import javax.swing.BoxLayout ;
@ -93,7 +96,26 @@ public abstract class DatabaseConnectionPane<E extends com.fr.data.impl.Connecti
Connection database = DatabaseConnectionPane . this . updateBean ( ) ;
// 返回连接结果
DriverPage . updateCache ( ) ;
DataOperator . getInstance ( ) . testConnectionWithException ( database ) ;
final Exception [ ] exception = new Exception [ 1 ] ;
WorkContext . getCurrent ( ) . get ( DataOperatorProvider . class , new ExceptionHandler ( ) {
@Override
public Object callHandler ( RPCInvokerExceptionInfo exceptionInfo ) {
// 正常调用发生的异常也会被捕获,因此需要对异常类型进行判断,如果是NoSuchMethodException 就要去调用 testConnection
// 如果不是 NoSuchMethodException 保存下异常上下文
// 两种情况下异常都需要抛出
if ( exceptionInfo . getException ( ) instanceof NoSuchMethodException ) {
if ( ! WorkContext . getCurrent ( ) . get ( DataOperatorProvider . class ) . testConnection ( database ) ) {
exception [ 0 ] = new Exception ( Toolkit . i18nText ( "Fine-Design_Description_Of_Test_Connection" ) ) ;
}
} else {
exception [ 0 ] = exceptionInfo . getException ( ) ;
}
return null ;
}
} ) . testConnectionWithException ( database ) ;
if ( exception [ 0 ] ! = null ) {
throw exception [ 0 ] ;
}
return null ;
}