Я создаю Java-приложение, которое подключается к нескольким базам данных.Пользователь сможет выбрать базу данных, к которой он хочет подключиться, из выпадающего списка.
Затем программа подключается к базе данных, передавая имя методу, который создает начальный контекст, чтобы он мог общаться с источником данных веб-логики oracle.
public class dbMainConnection {
private static dbMainConnection conn = null;
private static java.sql.Connection dbConn = null;
private static javax.sql.DataSource ds = null;
private static Logger log = LoggerUtil.getLogger();
private dbMainConnection(String database) {
try {
Context ctx = new InitialContext();
if (ctx == null) {
log.info("JDNI Problem, cannot get InitialContext");
}
database = "jdbc/" + database;
log.info("This is the database string in DBMainConnection" + database);
ds = (javax.sql.DataSource) ctx.lookup (database);
} catch (Exception ex) {
log.error("eMTSLogin: Error in dbMainConnection while connecting to the database : " + database, ex);
}
}
public Connection getConnection() {
try {
return ds.getConnection();
} catch (Exception ex) {
log.error("Error in main getConnection while connecting to the database : ", ex);
return null;
}
}
public static dbMainConnection getInstance(String database) {
if (dbConn == null) {
conn = new dbMainConnection(database);
}
return conn;
}
public void freeConnection(Connection c) {
try {
c.close();
log.info(c + " is now closed");
} catch (SQLException sqle) {
log.error("Error in main freeConnection : ", sqle);
}
}
}
Моя проблема в том, что произойдет, если, скажем, кто-то забудет создать источник данных для базы данных, но все равно добавит его в раскрывающийся список?Прямо сейчас, что происходит, если я пытаюсь подключиться к базе данных, которая не имеет источника данных, он ошибается, говоря, что не может установить соединение.Это то, что я хочу, но если я подключаюсь к базе данных, у которой сначала есть источник данных, который работает, затем пытаюсь подключиться к базе данных, у которой нет источника данных, снова она выдает ошибку
javax.naming.NameNotFoundException: Невозможно разрешить jdbc.peterson.Решено 'JDBC';оставшееся имя "петерсон".
Что опять-таки можно ожидать, но что меня смущает, так это то, что он захватывает последнее хорошее соединение, предназначенное для другой базы данных, и обрабатывает все так, как будто ничего не произошло.
Кто-нибудь знает, почемуто есть?Является ли weblogic кешированием соединения или что-то как отказоустойчивое?Это плохая идея для создания связей таким образом?