Sono bloccato in un problema relativo agli oggetti di origine dati in java. Ho impostato i parametri di connessione dell'origine dati nell'oggetto origine dati (org.apache.tomcat.jdbc.pool.DataSource). Voglio ottenere quei parametri dall'oggetto di origine dati prima di chiamare le informazioni di debug significative del log del metodo getConnection all'interno di catch se rilevano un'eccezione.Come ottenere le configurazioni del database utilizzando l'oggetto origine dati in java
Di seguito è riportato il codice che ho provato finora. Posso ottenere tutti i parametri di connessione dai metadati come segue [es: - connection.getMetaData(). GetURL()], ma voglio rilevare l'eccezione e registrare url, password, username come log se getConnection() genera un'eccezione. Pertanto, ho bisogno di ottenere quelle informazioni dall'oggetto di origine dati prima che provi a creare la connessione db.
try {
// try to get the lookup name. If error empty string will be returned
jndiLookupName = connectionProperties.getProperty(RDBMSConstants.PROP_JNDI_LOOKUP_NAME);
datasource = InitialContext.doLookup(jndiLookupName);
connection = datasource.getConnection(); // WHEN THIS THROWS EXCEPTION...
logger.info(connection.getMetaData().getURL()); // these won't work since exception already thrown.
logger.info(connection.getMetaData().getUserName());
logger.info(connection.getMetaData().getDriverName());
logger.info(connection.getMetaData().getDriverVersion());
isConnected = true; // if no errors
logger.info("JDBC connection established with jndi config " + jndiLookupName);
} catch (SQLException e) {
//...I WANT ALL CONNECTION PARAMETERS (URL,PASSWORD,USERNAME) HERE
throw new SQLException("Connecting to database failed with jndi lookup", e);
}
Quando ho debug remoto ottengo oggetto origine dati come segue ..
[email protected]{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=com.mysql.jdbc.Driver; maxActive=100; maxIdle=8; minIdle=0; initialSize=0; maxWait=30000; testOnBorrow=false; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:mysql://localhost/wso2_mb_1; username=a; validationQuery=null; validationQueryTimeout=-1; validatorClassName=null; validationInterval=30000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=ConnectionState;StatementFinalizer;org.wso2.carbon.ndatasource.rdbms.ConnectionRollbackOnReturnInterceptor;; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; }
posso vedere tutti i parametri URL, nome utente e password sono lì, ma non riesco a ottenere quelle. C'è un modo per ottenere questi valori dall'oggetto di origine dati.
ha funzionato. Grazie, grazie .. !!! – plr
Qual è l'implementazione DataSource in Glassfish/Payara? –
Non ne ho idea. È possibile utilizzare il debugger per ottenere l'implementazione effettiva ... – fateddy