여러 데이터베이스에 연결되는 Java 응용 프로그램을 만들고 있습니다. 사용자는 드롭 다운 상자에서 연결할 데이터베이스를 선택할 수 있습니다.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);
}
}
}
내 문제는 누군가가 데이터베이스에 대한 데이터 소스를 만들 잊어 말을하지만 그들은 여전히 드롭 다운 상자에 추가하면 어떻게 무엇인가? 지금은 데이터 소스가없는 데이터베이스에 연결하고 연결하려고하면 연결이 끊어 질 수 없다는 오류가 발생합니다. 어떤 것을 원하지만 데이터 소스가없는 데이터베이스에 먼저 연결 한 다음 데이터 소스가없는 데이터베이스에 연결하려고 시도하면 다시 오류가 발생합니다.
.naming.NameNotFoundException : 'jdbc.peterson'을 확인할 수 없습니다. 해결 된 'jdbc'; 나머지 이름은 '피터슨'.
내가 다시는 기대할 수 있지만 나에게 혼란 스럽다는 것은 다른 데이터베이스에 대한 마지막 연결을 잡아서 아무 일도 일어나지 않는 것처럼 모든 것을 처리한다는 것입니다.
누구나 알고 계십니까? weblogic이 연결이나 무언가를 fail safe로 캐싱하고 있습니까? 이런 식으로 연결을 만드는 것은 나쁜 생각입니까?
dbMainConnection의 catch 범위에서 ds를 null로 만들려고 했습니까? –