Tomcat5.59 
**********************************************************************
server.xml中已配置如下:
<Resource
      name="jdbc/redwave"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      password="827126"
      maxIdle="2"
      maxWait="5000"
      username="hongbo"
      url="jdbc:oracle:thin:@192.168.0.8:1521:redwave"
      maxActive="6"/>
**********************************************************************
在web.xml中配置如下:<resource-ref>
      <description>Tomcat DBCP</description>
      <res-ref-name>jdbc/redwave</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
***********************************************************************
context.xml中配置如下:<?xml version="1.0" encoding="UTF-8"?>
<Context path="/redwave">
  <Resource auth="Container" 
            driverClassName="oracle.jdbc.driver.OracleDriver"
            maxActive="20" 
            maxIdle="10"
            maxWait="-1"
            name="jdbc/redwave" 
            password="827126" 
            type="javax.sql.DataSource" 
            url="jdbc:oracle:thin:@192.168.0.8:1521:redwave" 
            username="hongbo"/>
</Context>
***********************************************************************
我在DB类中这样调用的,打算获得连接:
    Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            DataSource ds = (DataSource)
            envCtx.lookup("jdbc/redwave");
 
            Connection con = ds.getConnection();
    return con;
*********************************************************************
现在一运行就出如下错误:
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:247)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:284)
        at javax.naming.InitialContext.lookup(InitialContext.java:351)
        at hongshun.commcon.UpdateServlet.main(UpdateServlet.java:87)
***********************************************************************
1.连接池和数据源是按我上面的方法配置吗?如果我上面的方法不对请指出,或者给个例子也行
2.initCtx.lookup("java:comp/env");中("java:comp/env"是写死的吗?)请知道我朋友帮帮忙,我下午结帖.谢谢!

解决方案 »

  1.   

    给个server.xml的配置你试试,在<Host></Host>标签之间加上下面的代码:<Context className="org.apache.catalina.core.StandardContext"
    cachingAllowed="true" 
    charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" 
    crossContext="false"
    mapperClass="org.apache.catalina.core.StandardContextMapper"
    privileged="true" reloadable="true" swallowOutput="false" useNaming="true" 
    wrapperClass="org.apache.catalina.core.StandardWrapper"
    path="/虚拟路径" 
    docBase="实际路径" 
    debug="4">

      <Logger className="org.apache.catalina.logger.FileLogger" 
      prefix="localhost_emc_log." suffix=".txt" 
      timestamp="true"/>   <!-- Define a database connection pool for MSSQL -->
      <Resource name="jdbc/ckg" auth="Container" type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/ckg">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>    
    <parameter>
      <name>driverClassName</name>   <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>   
    <parameter>
      <name>url</name>   <value>jdbc:oracle:thin:@127.0.0.1:1521:XXX</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>Program</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>Program</value>
    </parameter>    
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>3000</value>
    </parameter>
    <parameter>
      <name>removeAbandoned</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>removeAbandonedTimeout</name>
      <value>60</value>
    </parameter>
    <parameter>
      <name>logAbandoned</name>
      <value>true</value>
    </parameter>
      </ResourceParams>  <ResourceLink global="jdbc/ckg" name="jdbc/ckg" type="javax.sql.DataSource"/> </Context>
      

  2.   

    这个是我调用数据源的一段代码,希望能帮上你!
    public class BaseDAO
    {
    private static DataSource pool = null;
    private static Context env = null;
    //private Connection conn = null;
    protected String tableName="";
    public BaseDAO() throws Exception
    {
    if (pool != null) return;

    try
    {
    env = (Context) new InitialContext().lookup("java:comp/env");
    pool = (DataSource)env.lookup("jdbc/" + AppConstant.APP_ID);
    }
    catch(NamingException ne) 
    {
    env = null;
    pool = null;
    System.out.println(ne.getMessage());
    throw new Exception(ne.getMessage());
    }
    }

    public Connection getConn() throws AppException
    {
    try
    {
    if (pool == null)
    throw new Exception("Data source invalid!");
    else
    return pool.getConnection();
    }
    catch(SQLException e) 
    {
    throw new Exception(e.getMessage());
    }
    }

    public void closeConn(Connection conn)
    {
    try
    {
    if (conn != null) conn.close();
    }
    catch (Exception e)
    {
    }
    }
    }
      

  3.   

    这个是我调用数据源的一段代码,希望能帮上你!
    public class BaseDAO
    {
    private static DataSource pool = null;
    private static Context env = null;
    //private Connection conn = null;
    protected String tableName="";
    public BaseDAO() throws Exception
    {
    if (pool != null) return;

    try
    {
    env = (Context) new InitialContext().lookup("java:comp/env");
    pool = (DataSource)env.lookup("jdbc/" + AppConstant.APP_ID);//数据源名称
    }
    catch(NamingException ne) 
    {
    env = null;
    pool = null;
    System.out.println(ne.getMessage());
    throw new Exception(ne.getMessage());
    }
    }

    public Connection getConn() throws AppException
    {
    try
    {
    if (pool == null)
    throw new Exception("Data source invalid!");
    else
    return pool.getConnection();
    }
    catch(SQLException e) 
    {
    throw new Exception(e.getMessage());
    }
    }

    public void closeConn(Connection conn)
    {
    try
    {
    if (conn != null) conn.close();
    }
    catch (Exception e)
    {
    }
    }
    }
      

  4.   

    <font color=red>我对这个也很头晕的</font>
      

  5.   


    1. http://localhost:8080/admin/
    Resource-Data source ->   DataSourceActions    ->Create New Data Source 
    JNDI Name:MyDataSource
    Data Source URL:jdbc:mysql://localhost/datasource
    JDBC Driver Class:org.gjt.mm.mysql.Driver
    User Name:root
    Password:*********
    2.web.html中加
    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>MyDataSource</res-ref-name>
    <res-type>javax.sql.DataSource<res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    3.测试页面
    <%@ page import="java.sql.*"%>
    <%@ page import="javax.sql.*"%>
    <%@ page import="javax.naming.*"%>
    <%@ page session="false" %>
    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title></title>
    <% 
    DataSource ds = null;
    Connection conn=null;
    Statement stmt=null;
    try{
    InitialContext ctx=new InitialContext();
    ds=(DataSource)ctx.lookup("java:comp/env/MyDataSource");
    conn = ds.getConnection();
    stmt = conn.createStatement();
    String strSql = " select * from user";
    ResultSet rs = stmt.executeQuery(strSql);
    while(rs.next()){
    out.print("用户名为。"+rs.getString(1)); 
    }        if(rs!=null){rs.close();}
            if(stmt!=null){stmt.close();}
            if(conn!=null){conn.close();} 
    }
    catch(Exception e){
    e.printStackTrace();
    }
    %>
    </head>
    <body>
    </body>
    </html>
    <jsp编程技巧集锦>  需要请和我联系:[email protected]