两种可能性:
1. 你在server.xml中对于Resource或ResourceParams写的有问题。
2。如果你确信没有问题,那一不定是你的jdbc driver不在server的classpath中,你需要将它们放到tomcat\common\lib或tomcat\share\lib下面。

解决方案 »

  1.   

    我server.xml中的部分:
    <Resource name="StarFlow/DataSource" auth="Container" scope="Shareable" type="javax.sql.DataSource"/> 
    <ResourceParams name="StarFlow/DataSource">
    <parameter>
    <name>factory</name><value>oracle.jdbc.pool.OracleDataSourceFactory</value>
    </parameter>
    <parameter>
    <name>driverClassName</name><value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
    <parameter>
    <name>url</name><value>jdbc:oracle:thin:@x225:1521:orajyj</value>
    </parameter>
    <parameter>
    <name>username</name><value>workflow</value>
    </parameter>
    <parameter>
         <name>password</name><value>workflow</value>
    </parameter>
    <parameter>
    <name>maxActive</name><value>100</value>
    </parameter>
    <parameter>
    <name>maxIdle</name><value>300</value>
    </parameter>
    <parameter>
        <name>removeAbandoned</name><value>true</value>
    </parameter> 
    <parameter>
    <name>logAbandoned</name><value>true</value>
    </parameter>
    <parameter>
    <name>maxWait</name><value>30000</value>
    </parameter>
    </ResourceParams>web.xml中的部分:
    <resource-ref id="ResourceRef_2">
    <res-ref-name>StarFlow/DataSource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>此外class12.jar已经放在tomcat/common/lib下了
      

  2.   

    参考http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html
    server.xml configuration
    <Context path="/DBTest" docBase="DBTest"
            debug="5" reloadable="true" crossContext="true">  <Logger className="org.apache.catalina.logger.FileLogger"
                 prefix="localhost_DBTest_log." suffix=".txt"
                 timestamp="true"/>  <Resource name="jdbc/TestDB"
                   auth="Container"
                   type="javax.sql.DataSource"/>  <ResourceParams name="jdbc/TestDB">
        <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>    <!-- Maximum number of dB connections in pool. Make sure you
             configure your mysqld max_connections large enough to handle
             all of your db connections. Set to 0 for no limit.
             -->
        <parameter>
          <name>maxActive</name>
          <value>100</value>
        </parameter>    <!-- Maximum number of idle dB connections to retain in pool.
             Set to 0 for no limit.
             -->
        <parameter>
          <name>maxIdle</name>
          <value>30</value>
        </parameter>    <!-- Maximum time to wait for a dB connection to become available
             in ms, in this example 10 seconds. An Exception is thrown if
             this timeout is exceeded.  Set to -1 to wait indefinitely.
             -->
        <parameter>
          <name>maxWait</name>
          <value>10000</value>
        </parameter>    <!-- MySQL dB username and password for dB connections  -->
        <parameter>
         <name>username</name>
         <value>javauser</value>
        </parameter>
        <parameter>
         <name>password</name>
         <value>javadude</value>
        </parameter>    <!-- Class name for mm.mysql JDBC driver -->
        <parameter>
           <name>driverClassName</name>
           <value>org.gjt.mm.mysql.Driver</value>
        </parameter>    <!-- The JDBC connection url for connecting to your MySQL dB.
             The autoReconnect=true argument to the url makes sure that the
             mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
             connection.  mysqld by default closes idle connections after 8 hours.
             -->
        <parameter>
          <name>url</name>
          <value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
        </parameter>
      </ResourceParams>
    </Context>web.xml configuration
    <?xml version="1.0" encoding="ISO-8859-1"?>
        <!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      <description>MySQL Test App</description>
      <resource-ref>
          <description>DB Connection</description>
          <res-ref-name>jdbc/TestDB</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>
    </web-app>
      

  3.   

    这是tomcat的bug
    有另一种方式:
    把所有参数放在  <Resource name="jdbc/TestDB"
                   auth="Container"
                   type="javax.sql.DataSource"
                   username="..." password="..." .../> 内作为其参数
    而不要用其的子标签实现