2013-08-29 3 views
0

단일 응용 프로그램 서버 (Jboss 4.2.3)에 2 개의 데이터 소스에 대한 JNDI 설정이 있습니다.사용자를 다른 데이터 소스에 매핑하는 방법

어떤 데이터베이스 요청이 어떤 데이터베이스 연결에서 발생했는지 식별하려면 어떻게합니까? 사용자 요청에 따라 Db 연결을 설정하는 방법 사용자에게 한 번만 DB 연결이 필요합니다. 즉, 내 애플리케이션에서 동적 데이터 소스를 사용하고 싶습니다. 순수한 JDBC 연결을 사용했습니다.

+0

분명히 말하자면 두세 가지 질문이 있습니다 (하나씩 줄이십시오). BTW 어떤 데이터베이스? – Beryllium

+0

나는 2 개의 데이터 소스를 정의했다. (둘 다 오라클 DB를 가리키고있다.) 나의 질문은 우리가 어떻게 식별 할 수 있는지 (db가 사용되어야 할 애플 리케이션 서버) –

답변

0

다중 소유 응용 프로그램을 작성하고 있습니다.

  • 그래서 사용자와 데이터 소스 (예 : DB 테이블) 사이에 다른 매핑이 필요합니다. 해당 매핑을 기반으로 데이터 소스를 선택합니다. 당신이 request.getRemoteUser()를 호출 할 수 있도록

  • 사용자, 응용 프로그램에 대해 인증해야합니다. 이를 사용하여 매핑 테이블에서 데이터 소스 이름을 조회합니다.

  • 이제 데이터 소스의 이름을 가지고있다. 데이터 소스는 JNDI에 바인딩되며 각 데이터 소스에는 고유 한 이름이 있습니다.

응용 프로그램에서 당신은 그 이름하여 데이터 소스를 조회 :

final DataSource ds = (DataSource) ic.lookup("java:/jdbc/x1"); 
final Connection conn = ds.getConnection(); 
try { 
    // Do something with connection 
} finally { 
    conn.close(); 
} 

그래서 귀하의 경우는 java:/jdbc/x1java:/jdbc/x2 같은 두 개의 이름이있다.

JNDI 이름은 데이터 소스가 정의 된 위치와 동일한 위치에 정의합니다.

+0

고마워 베릴륨 알고 싶다면 사용자 요청에 데이터 소스 이름 (Java :/jdbc/x1 또는 java :/jdbc/x2)을 전달할 수있는 기술이 있습니까 ?? –

+0

네, 이미 예제에 있습니다 : 그냥 문자열 인자를 요청에서'lookup()'메소드로 전달하십시오. 기술적으로 가능하지만 보안 구멍을 열지 않았는지 확인하십시오. – Beryllium

+0

사용자 A가 x1 데이터 소스로, 사용자 A가 x2 데이터 소스로, 사용자 A가 그 시간에 애플리케이션에 로그인 할 때마다 x1 데이터가 필요합니다. 내 애플리케이션에 소스 이름이 있습니다. 한 번에 어느 사용자가 애플리케이션에 액세스 할 수 있는지 알지 못합니다. .. –

관련 문제