• javax.naming.NoInitialContextException错误的解决方案


    今天,学习用了一下nutz框架,写了一个HelloWorld的小程序,在用jndi配置数据源时,写了一个测试类,并在main方法中调用了jndi获得数据库连接,但是报错了,错误信息如下:

    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。

    这是什么问题呢,大体好像说是上下文初化异常!我看了一下我的配置

    步骤:   
    1. 在tomcat目录下conf/context.xml文件中 加入一下代码 
          <Resource name="jdbc/test" 
          auth="Container" 
          type="javax.sql.DataSource" 
          driverClassName="net.sourceforge.jtds.jdbc.Driver" 
          url="jdbc:sqlserver://localhost:1433;databaseName=nutztest" 
          username="sa" 
          password="sa" 
          maxActive="100"   //连接池的最大数据库连接数,设为0表示无限制 
          maxIdle="30"      //最大空闲数,设为0表示无限制 
          maxWait="10000"/> //最大连接等待时间.如果超时将接到异常.设为  -1 表示无限制 

    2.将jtds-1.2.5jar包,nutz.jar放到了工程中

    3.  写测试类

    public class Test{

    public Connection getConnection(){ 
    try { 
    Context ctx = new InitialContext(); 
    DataSource ds = (DataSource)ctx.lookup("jdbc/test"); 
    conn = ds.getConnection(); 
    } catch (NamingException e) { 
    e.printStackTrace(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 

    return conn; 


    public static void main(String[] args) { 
    System.out.println(newTest().getConnection()); 

    }

    4.运行tomcat-- 运行测试代码,抛出异常: 
    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(NamingManager.java:645) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 

    后来看到论坛里的回复才知道原因

    在用JNDI连接数据库时用main函数测试时总报错,
    InitialContext 是要在应用服务器的上下文里才有的。
    你在普通的应用程序里怎么行!
    放到tomcat里面运行看看吧!
    不能用main函数直接测试,只能放到tomcat或者servlet、jsp显示
  • 相关阅读:
    【流水账】2021-06-19 Day-09
    【流水账】2021-06-18 Day-08
    【流水账】2021-06-16 Day-06
    【流水账】2021-06-15 Day-05
    .Net调用Java的实现方法
    优先队列的实例题
    栈的相关程序题
    重载函数
    卡特兰数
    关于全排列的递归
  • 原文地址:https://www.cnblogs.com/borter/p/9578158.html
Copyright © 2020-2023  润新知