在Struts的Action里面可以定义一个DataSource,如下
DataSource ds = this.getDataSource(request, Constants.Data_KEY);我的疑问是,这里获得的DataSource可以为一个对象所用吗,即把它作为构造一个对象的一个参数,
因为该对象实现类需要用到数据库连接,所以把Datasource作为提供数据库连接的连接池。例如:
Message m=new Message(ds);这样传递下去,DataSouce ds在Message类里面能起做用吗?----
我的目的是在message里面获取一个Datasource,如果不是ActionServlet的一个实例,可能获得吗?
(这里的DataSource是Struts包里面提供的一个简单实现)请教各位,请不吝赐教。谢谢。

解决方案 »

  1.   

    Datasource 是个数据原类,用它创建的对象当然可以作为一个参数传递给一个方法,你可以这样定义这个Manage 类:
    package yourpackage;
    import javax.sql.*;
    import java.sql.*
    public class Manage {
    private attribute1;
    private attribute2;
    ....
    private DataSource datasource=null;
    //default constructor
    public Manage(){}
    //anathor constructor
    public Manage(DataSource datasource){
    .....
    this.datasource=datasource;
    }
    这样当你用Manage manage=new Manage(datasource)
    创建一个Manage的对象时,你就可以在manage中使用
    这个数据原的对象datasource来操作数据库了。
    例如:Connection conn=datasource.getConnection();
    //以下是对数据库的具体操作
    ......
      

  2.   

    连接池在大型的应用服务器都有提供. WAS有WAS的连接池 WebLogic有自己的连接池.
    另外还有开源的, 比如DBCP
      

  3.   

    我觉得是楼主是不是在问在业务层怎么获得dataSource???而不是在action中获得?
      

  4.   

    对。
    mingr6370(丑男) 这位朋友,可以在业务层直接获得Struts-config.xml里面定义的DataSource.传Datasource做参数的做法是可以通过了。但是在业务层次直接获得要怎么做?
      

  5.   

    在业务层次可以直接直接获得Struts里面的DataSource吗?
    请指点。
      

  6.   

    在业务层次可以直接直接获得Struts里面的DataSource吗?
    请指点。
      

  7.   

    可以用TOMCAT的连接池或者weblogic的连接池,在DB层中Context ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("xxxxx");
    Connection conn = ds.getConnection();不知能否满足你的要求
      

  8.   

    楼上,谢谢你,这是一种解决方式,但问题是我现在无法直接操作tomcat来搞我的连接池只能自己实现,我就是想知道 Struts 里面的DataSource可否直接在业务层获取。
      

  9.   

    把request对象传到业务层里就可以了。
      

  10.   

    如何在一个web应用中一个单纯的类中获取DataSource,而不是从Request中取的?