2013-06-20 2 views
0

IBM에서 출판 한 Managing database connections with JDBC을 공부 중입니다. 그것은 오래된 것들입니다 (2001). 그들은 JNDI를 사용하고 있습니다. 내가 그들의 코드를 구현하려고 할 때 :InitialContext 공장 오류

try { 
     Hashtable env = new Hashtable(); 
     env.put(
     Context.INITIAL_CONTEXT_FACTORY, 
     "com.sun.jndi.fscontext.RefFSContextFactory"); 

     // Create the initial context 

     Context ctx = new InitialContext(env); 

     // Here we create the actual DataSource and then set the relevant 
     // parameters. 

     TdsDataSource ds = new TdsDataSource(); 

     ds.setServerName(serverName); 
     ds.setPortNumber(portNumber); 
     ds.setDatabaseName(databaseName); 
     ds.setUser(login); 
     ds.setPassword(password); 
     ds.setDescription("JDBC DataSource Connection"); 

     // Now we bind the DataSource object to the name we selected earlier. 

     ctx.bind(filePath, ds); 
     ctx.close(); 

    // Generic Exception handler, in practice, this would be replaced by an 
    // appropriate Exception handling hierarchy. 

    } catch (Exception ex) { 
     System.err.println("ERROR: " + ex.getMessage()); 
    } 

을하지만 더 "com.sun.jndi.fscontext.RefFSContextFactory"파일 시스템 서비스 제공 업체가 없다는 것을 알게되었습니다. 그런 다음 코드를 다음과 같이 변경했습니다 (Initialize Data Source Properties에서). 내가 아직도는 Context.INITIAL_CONTEXT_FACTORY 요구 생각

ERROR: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 

:

OracleDataSource ods = new OracleDataSource(); 
ods.setDriverType("oci"); 
ods.setServerName("dlsun999"); 
ods.setNetworkProtocol("tcp"); 
ods.setDatabaseName("816"); 
ods.setPortNumber(1521); 
ods.setUser("scott"); 
ods.setPassword("tiger"); 
Context ctx = new InitialContext(); 
ctx.bind("jdbc/sampledb", ods); 

이 코드를 실행하려고

, 나는 다음과 같은 오류를 얻고있다. 어떤 해결책? 나는 아침부터 그것을 찾고있다.

답변

0

당신이 StactTrace 또는 컨테이너/서버에 대한 자세한 내용은이 코드를 실행하고 있습니다. 그들이 함께 사용하지만

데이터 소스 객체와 JNDI 컨텍스트는 두 개의 서로 다른 자원입니다을 게시 할 수 있다면 도움이 될 것입니다. JNDI은 이름과 같은 경로로 식별 된 객체를 저장할 수있는 저장소입니다. DataSource은 JDBC를 사용하여 데이터베이스 연결을 설정하는 정보가 들어있는 객체입니다. DataSource에 대한 시스템 전체 액세스를 제공하기 위해 객체는 키를 사용하여 JNDI에 바인드되므로 시스템 내에서 전역으로 조회 할 수 있습니다.

문제는 JNDI 제공자 라이브러리에있는 것 같습니다. 이를 위해 DataSource 구현 라이브러리 (TdsDataSource에서 OracleDataSource)를 변경할 필요가 없습니다.

이 세부 사항은 귀하의 런타임 환경을 이해하는 데 도움이 될 수 있습니다.

1

InitialContext 개체를 만들기 전에 아래의 내용을 포함 시키십시오. 문제가 해결됩니다.

System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); 
System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming"); 

이 기본적으로 System 초기있는 컨텍스트 라이브러리 당신이 당신의 데이터 소스의 컨텍스트를 저장하는 데 사용하고 알려줍니다.

+0

그 중 하나가 작동하지 않습니다. 그것은 jdbc ("jdbc/sampledb"에서)가 문맥에 있지 않다는 것입니다. – kaushik