如何配置:
1.将数据库驱动程序拷贝到tomcat/common/lib目录下面,不同数据库的驱动不一样,有服务商提供。
2.修改congif/server.xml文件,在<host>配置节点下面加上资源节点,如下:
<Context path="/HibernateTest" docBase="HibernateTest">
<Resource name="jdbc/testds"
auth="Container"
type="javax.sql.DataSource"
username="hicss"
password="hicss"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:icss"
maxActive="8"
maxIdle="4"/>
</Context>
3.修改Web应用WEB-INF/web.xml文件,加上Resource-Def,如下://其实这个不要也可以的
<resource-ref>
<description>DBConnection</description>
<res-ref-name>jdbc/testds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.重新启动Web应用,在Web应用中可以通过下面的代码来获取数据源和数据库连接:
javax.naming.InitialContext context = new javax.naming.InitialContext();
DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/TestDB" );
connection = (Connection)ds.getConnection();
误区:
这样配置完成了,但往往总有些朋友习惯性地写一个main方法去测试这个数据源,从而引起
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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at ccnu.cs.jcoder.dbsrc.TestDS.<init>(TestDS.java:15)
at ccnu.cs.jcoder.dbsrc.TestDS.main(TestDS.java:35)
异常.
原因是:
java单元的环境是jdk,用MAIN方法执行的程序属于普通应用程序,使用的是我们的JDK环境;而我们的数据连接池是在tomcat服务器中配置的,他的环境是TOMCAT服务器,所以大家测试的时候直接用JSP页面或SERVLET就可以了