我做了个后台,使用的是JNDI数据库连接池.平时正常打开页面没有问题,数据库链接正常,也不报错.但是登陆后台后,出现错误:
从数据池取得数据库连接时出错;
错误为:javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.naming.java.javaURLContextFactory [Root exception is java.lang.ClassNotFoundException: org/apache/naming/java/javaURLContextFactory]
_______________________________________________________________________________________
后台报了错误,但是数据库链接仍然是正常的,网页访问没有问题,请问是怎么回事了.我的代码如下
_________________________________________________________________________________________
/**
 * 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接
 * 池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例.
 */
public class DBConnectionManager
{
static private DBConnectionManager instance; // 唯一实例
static private int clients;
static private Connection conn=null;
private PreparedStatement prepareStatement =null;
private Statement stmt = null;
private ResultSet rs=null; /**
 * 返回唯一实例.如果是第一次调用此方法,则创建实例
 *
 * @return DBConnectionManager 唯一实例
 */
static synchronized public DBConnectionManager getInstance()
{
{
instance = new DBConnectionManager();
}
clients++;
return instance;
} public static  Connection getConns(String jndiName) throws SQLException,NamingException
{
try
{

   Context initCtx = new InitialContext();
//创建一个命名对
   Context Ctx = (Context)initCtx.lookup("java:comp/env");
    if( Ctx == null ) {
        System.out.println("fail to access url context!");
      } //获取连接池对象
DataSource ds =(DataSource)Ctx.lookup(jndiName);
conn =ds.getConnection();
//获取数据库连接
}
catch(SecurityException se)
{
throw se;
}
return conn;
}
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
调用代码如下:
ublic class DataBase 
{
    Connection conn = null;
    private Statement stmt = null;
private PreparedStatement pstm = null;
private ResultSet rs = null;
private boolean connected = false;
private DBConnectionManager dbconn=null;
 void Init() throws SQLException,NamingException
{
 try
 {
 dbconn= DBConnectionManager.getInstance();
 conn= dbconn.getConns("jdbc/uupodata");
 }
 catch(NamingException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);}
 catch(SQLException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);}
 
}

解决方案 »

  1.   

    根本原因:ClassNotFoundException,java.lang.ClassNotFoundException: org/apache/naming/java/javaURLContextFactory]错出在类没有找到,估计你的后台(tomcat)配置有问题。。另外:
     catch(NamingException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);}
     catch(SQLException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);}
    抓了2个异常,不应该打印相同的错误提示,这样不便于你调试。  编码风格问题
      

  2.   

    那应该如何配置呢.以下是我再web-inf目录下的两个配置文件的设置:1.web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
       <resource-ref>
        <description>
            Resource  reference  to  a  factory  for  java.sql.Connection
            instances  that  may  be  used  for  talking  to  a  particular
            database  that  is  configured  in  the  server.xml  file.
        </description>
        <res-ref-name>
            jdbc/uupodata
        </res-ref-name>
        <res-type>
            javax.sql.DataSource
        </res-type>
        <res-auth>
            Container
        </res-auth>
    </resource-ref>2.context.xml<!-- The contents of this file will be loaded for each web application -->
    <Context>    <!-- Default set of monitored resources -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Resource  name="jdbc/uupodata"  auth="Container"  type="javax.sql.DataSource"  username="sa"  password="790920"  driverClassName="net.sourceforge.jtds.jdbc.Driver"  url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=UupoData"  maxActive="200"  maxIdle="4" maxWait="10000"/>
    <parameter>
            <name>factory</name>
            <value>org.apache.naming.java.javaURLContextFactory</value>
            </parameter>
        <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        --></Context>
      

  3.   

    不是导入工程吧,应该是容器tomcat的common/lib目录下吧UP!
      

  4.   

    我得是TOMCAT5.5.容器tomcat的common/lib目录下安装时就有这个包得!!!
      

  5.   

    怀疑是tomcat下面的Catalina包有问题。这个跟工程无关,重装一下tomcat试试看。
      

  6.   

    我重装了下。还是这样啊!!我在三台机子上测试都是 这样TOMCAT是5.5.12
      

  7.   

    我的怎么不行的。还需要什么JAR吗?大家用这种连接池另外添加有什么JAR包吗?