我用tomcat 6.0 配置sqlserver2000 数据库的连接池 
项目文件地址:D:\workspace\news 
数据库名称是:news ,用户名:sa ,密码:sa 配置tomcat6.0的server.xml文件,地址为 
C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml 配置方法是:在<host></host>标签之间加入 <Context path="/news" docBase="D:\workspace\news" reloadable="true" crossContext="true"> <Resource name="jdbc/news" 
auth="Container" 
type="javax.sql.DataSource" 
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=news" 
username="sa" 
password="sa" 
maxIdle="30" 
maxWait="10000" 
maxActive="100"/> 
</Context> 配置web-inf文件下的web.xml文件 
具体方法如下: 
在<web-app></web-app>标签之间加入 
<resource-ref> 
<res-ref-name>jdbc/news</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 程序如下: 
public void getConnPool(){ 
try{ 
if (Connected){ 
throw new SQLException("数据库已经连接,无需重连!"); 

Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
//获取连接池对象 DataSource ds = (DataSource)envCtx.lookup("jdbc/news"); conn = ds.getConnection(); 
Connected = true; 
showConnNum(); 
}catch(NamingException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);} 
catch(SQLException e){System.out.println("从数据池取得数据库连接时出错;\r\n错误为:"+e);} 
} 在执行到Context envCtx = (Context) initCtx.lookup("java:comp/env");这一句后就报异常了,异常的具体内容是: 
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的common下面了没有?Context envCtx = (Context) initCtx.lookup("java:comp/env/");
      

  2.   

    问题补充:
    我加载的包如下: 
    msbase.jar 
    mssqlserver.jar 
    msutil.jar 
    jtds.jar 
    commons-collections.jar 
    commons-dbcp.jar 
    commons-pool.jar 我想了一切我能想到的方法,问题依然没有解决,希望高手给点意见 
    另外我可以访问sqlserver数据库的1433端口 按照楼上的方法问题依然存在
      

  3.   

    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 的意思其实就是说java.naming.factory.initial,这个初始化工产找不到, 
    像jboss就得在classpath路径下加上一个jndi.properties文件, 
    内容为: 
    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory 
    java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces 
    java.naming.provider.url=localhost 现在报的错就是没用给InitialContext类传环境参数
    一个网友给出以上解释,但是没有给出具体解决方法
      

  4.   

    server.xml也要配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <Server>
      <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
      <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
      <GlobalNamingResources>
        <Environment
          name="simpleValue"
          type="java.lang.Integer"
          value="30"/>
        <Resource
          auth="Container"
          description="User database that can be updated and saved"
          name="UserDatabase"
          type="org.apache.catalina.UserDatabase"
          pathname="conf/tomcat-users.xml"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>
        <Resource
          name="Test"
          type="javax.sql.DataSource"
          password="root"
          driverClassName="com.mysql.jdbc.Driver"
          maxIdle="2"
          maxWait="5000"
          username="root"
          url="jdbc:mysql://localhost:3306/jspdev"
          maxActive="4"/>
        <Resource
          name="jdbc/jspdev"
          type="javax.sql.DataSource"
          password="bn"
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
          maxIdle="2"
          maxWait="5000"
          username="bn"
          url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
          maxActive="4"/>
      </GlobalNamingResources>
     
      

  5.   

    tomcat中的几种连接池配置代码(包括tomcat5.0,tomcat5.5x,tomcat6.0) 
    Java代码 
    Tomcat6.0连接池配置   
      1.配置tomcat下的conf下的context.xml文件,在之间添加连接池配置:    
      <Resource name="jdbc/oracle"  
             auth="Container"      
             type="javax.sql.DataSource"      
             driverClassName="oracle.jdbc.driver.OracleDriver "      
             url=" jdbc:oracle:thin:@host:port:databse"      
             username=" user "      
             password="password"      
             maxActive="100"      
            maxIdle="30"      
            maxWait="10000" />      
    2.配置你的应用下的web.xml中的之间加入:   
      <resource-ref>      
          <description>DB Connection</description>      
          <res-ref-name>jdbc/oracle</res-ref-name>      
          <res-type>javax.sql.DataSource</res-type>      
          <res-auth>Container</res-auth>      
        </resource-ref>      
    3.把连接数据库的第三方驱动放到common/lib下面就ok了   
    4.测试程序我就不写了   
      
    Tomcat5.5x连接池配置   
      
    方式一、全局数据库连接池   
    1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加   
    <Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>   
    2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:   
    <ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>   
    这样就可以了。   
    方式二、全局数据库连接池   
    1、同上   
    2、在tomcat\conf\context.xml的Context中增加:   
    <ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>   
    方式三、局部数据库连接池   
    只需在tomcat\webapps\myapps\META-INF\context.xml的Context中增加:   
    <Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>   
    参数说明:   
    driveClassName:JDBC驱动类的完整的名称;    
    maxActive:同时能够从连接池中被分配的可用实例的最大数;    
    maxIdle:可以同时闲置在连接池中的连接的最大数;    
    maxWait:最大超时时间,以毫秒计;    
    password:用户密码;    
    url:到JDBC的URL连接;    
    user:用户名称;    
    validationQuery:用来查询池中空闲的连接。   
    以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是从微软网站上下载的sql server jdbc (sp3)。