zoukankan      html  css  js  c++  java
  • 在Spring中配置JNDI数据源时碰到 javax.naming.NoInitialContextException错误的解决

    运行环境:tomcate7.0  IDE:myeclipse2017  jdk:1.8 spring依赖jar ojdbc14.jar

    1.在tomcat目录下conf/context.xml文件中 加入以下代码

    <Resource name="jdbc/orcl"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:ORCL"
    username="zhangsan"
    password="zs123"
    maxActive="100"
    maxIdle="30"
    maxWait="10000" />

    2.在spring的配置文件applicationcontext.xml文件里面配置

    <!-- JNDI -->
    <bean id="dataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"

     value="java:comp/env/jdbc/orcl">
    </property>

    3.写测试类打印出数据源的连接对象

    main{

    Context context = new InitialContext();
    DataSource dSource =(DataSource) context.lookup("java:comp/env/jdbc/orcl");
    Connection connection = dSource.getConnection();
    System.out.println(connection);
    connection.close();

    }

    打印连接对象然后测试一直报错:

    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显示
    jsp里面这样写:
    <%
    Context context = new InitialContext();
    DataSource dSource =(DataSource) context.lookup("java:comp/env/jdbc/orcl");
    Connection connection = dSource.getConnection();
    System.out.println("连接对象在console显示:"+connection);
    out.println("连接对象在jsp显示:"+connection);
    connection.close();
    %>
    我这样写问题解决了

    连接对象在console显示:jdbc:oracle:thin:@localhost:1521:ORCL, UserName=ZHANGSAN, Oracle JDBC driver

     注意要加ojdbc14.jar到项目中,在这里浪费了很多时间,特此标记一下。

  • 相关阅读:
    [Web 前端] CSS 盒子模型,绝对定位和相对定位
    [Android Pro] 跨平台反编译工具 jadx (ubuntu亲测 可用)
    [Web 前端] Jquery 复制元素,并修改属性, 追加到另一个元素后面
    [Web 前端 ] Jquery attr()方法 获取或修改 对象的属性值
    [Web 前端] Jquery实现可直接编辑的表格
    [Web 前端] td长度固定,内容过长,超过部分用省略号代替
    [Network] okhttp3与旧版本okhttp的区别分析
    [Android Pro] AndroidStudio IDE界面插件开发(进阶篇之Editor)
    graph embedding 使用方法
    win10 'make' 不是内部或外部命令
  • 原文地址:https://www.cnblogs.com/flyfishing1991/p/14049555.html
Copyright © 2011-2022 走看看