2006年11月25日星期六

2006-11-10 星期五

这几天一直在休息,老师出差了,昨天研究了在tomcat下配置jndi,发现在tomcat5.0和5.5下配置还有些不一样,老师是使用得5.0,按照老师那样配在5.5下就是不行,把下面这段xml放在tomcat的server.xml中的<Host></Host>标签里面

<Context path="/book" docBase="d:/bookdemodata" debug="0" reloadable="true"> 

<Resource name="jdbc/book" auth="Container" type="javax.sql.DataSource"/> 

<ResourceParams name="jdbc/book"> 

<parameter> 

<name>factory</name> 

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 

</parameter>

<parameter> 

<name>driverClassName</name> 

<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 

</parameter>

<parameter> 

<name>url</name> 

<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=book</value> 

</parameter> 

<parameter>

<name>username</name> 

<value>sa</value>

</parameter> 

<parameter>

<name>password</name>

<value></value> 

</parameter> 

<parameter>

<name>maxActive</name>

<value>20</value>

</parameter>

<parameter> 

<name>maxIdle</name>

<value>10</value>

</parameter>

<parameter> 

<name>maxWait</name>

<value>-1</value>

</parameter> 

<parameter>

<name>removeAbandoned</name>

<!-- Abandoned DB connections are removed and recycled -->

<value>true</value>

</parameter>

<parameter>

<name>removeAbandonedTimeout</name>

<!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned. -->

<value>60</value>

</parameter>

<parameter>

<name>logAbandoned</name>

<!-- Log a stack trace of the code which abandoned -->

<value>false</value>

</parameter> 

</ResourceParams>

</Context>

如果是在5.0下就没有问题,测试通过,而在5.5下面这样写就有错误了,到网上搜了些资料,说它们两个配置还是有些不一样的

在tomcat5.5下conf\Catalina\localhost目录下新建一个针对自己项目的xml文件

<?xml version="1.0" encoding="UTF-8"?>

<Context path="/addressbook" docBase="/addressbook" debug="0" reloadable="true"> 

<Resource

auth="Container"

name="jdbc/address"

type="javax.sql.DataSource"

password=""

driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

maxIdle="10"

maxWait="100000"

username="sa"

url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"

maxActive="20"/>

</Context>

文件名叫addressbook.xml这里的文件名是随便起的,在tomcat启动的时候会自动加载这个目录下的所有xml文件,OK 这样就调试通过了,而且看起来这样配置要比在5.0下配置简单。

还有一个方法

就是把sql的配置资源

<Resource

auth="Container"

name="jdbc/address"

type="javax.sql.DataSource"

password=""

driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

maxIdle="10"

maxWait="100000"

username="sa"

url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"

maxActive="20"/>

放入conf文件夹下的Context.xml中的<Context></Context>标签内,就可以了

再有就是在java代码中取得Connection的时候就不能像原来这样写了

Context initContext = new InitialContext();

Context envContext = (Context)initContext.lookup("java:comp/env");

DataSource ds = (DataSource)envContext.lookup("jdbc/addressbook");

conn = ds.getConnection();

这样写我试过也不行,tomcat会有异常

这样写就没错

Context initContext = new InitialContext();

DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");

conn = ds.getConnection();

经过一番研究试验,终于搞定了,但是其中玄机还不知是为何

像这个东西"java:comp/env"是啥意思(JNDI查找的Tomcat的默认名字)

Oh.god,我弄错了

Context initContext = new InitialContext();

Context envContext = (Context)initContext.lookup("java:comp/env");

DataSource ds = (DataSource)envContext.lookup("jdbc/address");

conn = ds.getConnection();

和这样写

Context initContext = new InitialContext();

DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");

conn = ds.getConnection();

都没错,都能出来数据

没有评论:

发表评论