日期:2014-05-18  浏览次数:20637 次

struts1.3+tomcat6 连接池(很晕)
我看一个例子只要在struts-config.xml中配置 <data-sources> </data-sources> ,然后再(DataSource)actionServlet.getServletContext().getAttribute(sourceName);就能得到datasource;但我的死活不行.提示说 "data-sources "   must   be   declared;

在网上看到另一方法,在Server.xml的 <context> 中配置了datasource;再在web.xml中加入了 <resource-ref> 相关配置.再用Context   ctx   =   new   InitialContext();     DataSource   ds=(DataSource)ctx.lookup( "java:comp/env/jdbc/test ");连接成功;

我想问这两种方法是什么关系,有什么区别吗?   叫什么?为什么第一种方法不行?
<自学的,如问题太菜请别见笑;)

------解决方案--------------------
struts-config.XML中右键data-sources然后New。

默认的type是:

org.apache.struts.util.GenericDataSource

struts自带的一个数据库连接池。

然后正确输入各种property的value。

测试,好用。



如果将type选择为:

org.apache.commons.dbcp.BasicDataSource

这个DBCP的数据库连接池。

然后键入正确的value。

测试,提示各种异常&找不到driver。



查看DBCP的文档,发现MYEclipse生成的配置XML元素有问题。

DBCP需要的是driverClassName和username这两个propertys。

而Myeclipse自动生成的是driverClass和user这两个propertys。


改过来之后发现DBCP的数据库连接池也好用了:)

这应该算是MYECLIPSE开发struts的一个BUG吧,数据库连接池的配置是按照struts默认的GenericDataSource来的。如果能动态的在选择数据库连接池的时候,找寻set()/get()方法来生成属性的名字应该更好。

也看出来不同的数据库连接池在命名规则方面存在的一些差异。

其实很简单的东西,我却花费了半天的时间,原因是我太相信工具了,以为生成的东西一定是正确的,所以一直在想是不是别的方面出错了。得到这次教训之后,要更加清晰的对工具持怀疑态度了。不能太过相信和依靠,还是自己对这些技术的了解最重要。



PS:tomcat有自带DBCP。不过我是自己从jakarta上面下的commons dbcp放到自己的lib里面的,当然,官方doc上面有这样的说明:

Commons-DBCP depends at runtime on commons-pool and commons-collections .

所以记得要把这两项也下回来和dbcp的jar文件一起放进lib才能保证不出错。

总之,认真+心细,才能更好的解决问题。





本文环境:
win2003 + jdk1.5.0_01
Tomcat 5.5 + Mysql4.1
Eclipse 3.0.1 + Myeclipse 3.8.4

本文提到的一些软件的下载地址:

j2se 5.0(SUN弄的这些乱七八糟的名字真讨厌,混乱的感觉):
Java.sun.com/j2se/1.5.0/DOWNLOAD.JSP "> http://java.sun.com/j2se/1.5.0/download.jsp

Tomcat:
http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi

MYSQL4.1:
http://dev.mysql.com/downloads/

Eclipse:
PHP "> http://www.eclipse.org/downloads/index.php

Jakarta commons(DBCP和其所需要的commons pool和commons collections都是在这里下):
http://jakarta.apache.org/site/downloads/downloads_commons.html

------解决方案--------------------
版本兼容性问题 可尝试换个版本