用tomcat,最担心的就是配置jndi的datasource的时候出现问题,随着各大厂商发布自己的jdbc的实现,兼容性的问题也就越来也突出了...
一般我们都是用tomcat自带的dbcp来处理,配置如下:
<resource name="jdbc/myds" auth="container" type="javax.sql.datasource" />
<resourceparams name="jdbc/myds">
<parameter>
<name>driverclassname</name>
<value>oracle.jdbc.driver.oracledriver</value>
</parameter>
<parameter>
<name>drivername</name>
<value>jdbc:oracle:thin:@server:port:sid</value>
</parameter>
<parameter>
<name>user</name>
<value>########</value>
</parameter>
<parameter>
<name>password</name>
<value>########</value>
</parameter>
</resourceparams>
oracle jdbc driver for jdk 1.4 or jdk 1.5
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html
不过这个写法,如果在jbuilderx中,跑tomcat 4.1,加上最新版的 oracle jdbc driver会存在问题,系统抛出的错误为:
javax.naming.namingexception: cannot create resource instance
at org.apache.naming.factory.resourcefactory.getobjectinstance(resourcefactory.java:189)
at javax.naming.spi.namingmanager.getobjectinstance(namingmanager.java:301)
at org.apache.naming.namingcontext.lookup(namingcontext.java:834)
at org.apache.naming.namingcontext.lookup(namingcontext.java:181)
at org.apache.naming.namingcontext.lookup(namingcontext.java:822)
at org.apache.naming.namingcontext.lookup(namingcontext.java:181)
at org.apache.naming.namingcontext.lookup(namingcontext.java:822)
at org.apache.naming.namingcontext.lookup(namingcontext.java:181)
at org.apache.naming.namingcontext.lookup(namingcontext.java:822)
at org.apache.naming.namingcontext.lookup(namingcontext.java:194)
at org.apache.naming.selectorcontext.lookup(selectorcontext.java:183)
at javax.naming.initialcontext.lookup(initialcontext.java:347)
看来dbcp针对java.sql.datasource相关的实现与ojdbc14.jar存在兼容性的问题,需要按照下面的写法才能ok:
<resource name="jdbc/myds" type="oracle.jdbc.pool.oracleconnectioncacheimpl"/>
<resourceparams name="jdbc/myds">
<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:@server:port:sid</value>
</parameter>
<parameter>
<name>user</name>
<value>########</value>
</parameter>
<parameter>
<name>password</name>
<value>########</value>
</parameter>
</resourceparams>
原来oracle自己实现了datasource的工厂类来管理datasource的建立!
同样发现微软的sql server 2000 driver for jdbc service pack 3也存在这个问题!
http://www.microsoft.com/downloads/details.aspx?familyid=07287b11-0502-461a-b138-2aa54bfdc03a&displaylang=en
需要如下配置:
<resource name="jdbc/myds" auth="container" type="com.microsoft.jdbcx.sqlserver.sqlserverdatasource"/>
<resourceparams name="jdbc/myds">
<parameter>
<name>factory</name>
<value>com.microsoft.jdbcx.sqlserver.sqlserverdatasourcefactory</value>
</parameter>
<parameter>
<name>driverclassname</name>
<value>com.microsoft.jdbcx.sqlserver.sqlserverdatasource</value>
</parameter>
<parameter>
<name>drivername</name>
<value>sqlserver</value>
</parameter>
<parameter>
<name>description</name>
<value>my datasource</value>
</parameter>
<parameter>
<name>servername</name>
<value>########</value>
</parameter>
<parameter>
<name>portnumber</name>
<value>1433</value>
</parameter>
<parameter>
<name>selectmethod</name>
<value>cursor</value>
</parameter>
<parameter>
<name>databasename</name>
<value>########</value>
</parameter>
<parameter>
<name>user</name>
<value>########</value>
</parameter>
<parameter>
<name>password</name>
<value>########</value>
</parameter>
<parameter>
<name>logintimeout</name>
<value>3000</value>
</parameter>
</resourceparams>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器