2012-11-07 48 views
0

Iam嘗試使用JNDI連接mysql。但它表明了異常使用JNDI的javax.naming.NoInitialContextException

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:

見我的代碼:

VendorDataSource vds = new VendorDataSource(); 
    vds.setServerName("localhost"); 
    vds.setDatabaseName("jnditest"); 
    vds.setDescription("The data source for inventory and personnel"); 

    try { 
      ctx = new InitialContext(); 
     ctx.bind("jdbc/myds", vds); 

    } catch (NamingException e1) { 

     e1.printStackTrace(); 
    } 

    try { 
     ctx = new InitialContext(); 
     DataSource ds = (DataSource)ctx.lookup("jdbc/myds"); 
     Connection conn = ds.getConnection("root", "password"); 

    } catch (NamingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

和錯誤消息:

javax.naming.NoInitialContextException: 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 
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) 
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.bind(Unknown Source) 
    at samplemariadb.DataSourceConnectivity.main(DataSourceConnectivity.java:33) 

回答

0

通常你需要指定來從InitialContext的(和你將使用哪裏的jndi樹)

你能做到這一點有兩種方式:

Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "<initialContextFactory>"); 
env.put(Context.PROVIDER_URL, "<url>"); 
env.put(Context.SECURITY_PRINCIPAL, "<user>"); 
env.put(Context.SECURITY_CREDENTIALS, "<password>"); 
ctx = new InitialContext(env); 

或創建一個jndi.properties並將其放置在你的類路徑:

java.naming.factory.initial=<initialContextFactory> 
java.naming.provider.url=<url> 
java.naming.security.principal=<user> 
java.naming.security.credentials=<password> 

在你的情況下,它是抱怨,因爲缺乏INITIAL_CONTEXT_FACTORY(這取決於哪您正在使用的Java EE服務器)。

希望它有幫助

+0

Iam也嘗試這種方法。但無法從無站點下載fscontext.jar文件。你能幫我給下載fscontext.jar文件的正確路徑嗎? – Haseena

+0

據我所知它包含在Java Web服務開發包中(http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-jwsdp-419428.html),但是我我不確定這是否是你需要的。 – richardtz

相關問題