日期:2014-05-19  浏览次数:20642 次

求救..action拿到的reqeust.不传到DataSource层..如何在DataSource能取得session里的东西???
现在是这样.
用户有4个数据库.
但只部署一份程序.
所以每个用户访问的时候.我需要跟他们的登陆标识,返回给他们对应的数据库连接.

如果从action层 -> BO层(request) ->con(request) .. if else -> return con ->DAO层

这样那我需要改的东西太多太多了..每个BO con都要加参数 那就疯了...上W个都得..


所以我就想 在action将 参数封装到session里..
然后在con 直接能get到session里的东西..

怎么实现呢??大大们!!! 求救啊!!!
我也配DWR了..
WebContext webContext = WebContextFactory.get(); webContext.getSession() ; webContext.getHttpServletRequest() ; webContext.getHttpServletResponse();
这个东西我也在con层用了..但是取不到啊..

不是说可以随意取的嘛!!哎!!难过死了!!!

大大们有没有什么好的解决办法啊..

我的思想就是 根据用户的请求 查看他的所属数据库标识 然后在con层 判断应该返回哪个数据库的连接..

我把3个层简单的代码贴一下..大大们...求帮助啊

action层
Java code

public class LoginAction extends Action {
    
    public ActionForward perform(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        ActionErrors errors = new ActionErrors();
        TlrctlForm tlrctlForm = (TlrctlForm) form;
        
        /*String className = "app.poozf.util.PoozfConMete";
        this.printFieldsValue(className);*/
        
        try {
            TlrctlBO tlrctlBo = new TlrctlBO();

            //在数据库查找时只用到了Tlrno,没有用到Passwd,所有在下面要比对查询到的密码是否一致
            DownAndTlrct downAndTlrct = tlrctlBo.searchDownAndTlrct(tlrctlForm.getTlrno(), tlrctlForm.getPasswd());

            Tlrctl tlrctl = downAndTlrct.getTlrctl(); // 操作员




BO层
Java code

    public DownAndTlrct searchDownAndTlrct(String tlrno, String passwd) {
        Connection con = null;
        Connection cons = null;
        DownAndTlrct downAndTlrct = new DownAndTlrct();
        try {
            con = DataSourceUtils.getConnection(pool);
            // 得到综合业务的连接
            //cons = DataSourceUtils.getConnection(pool);
            TlrctlDAO tlrctlDAO = new TlrctlDAO(con);
            /** 操作员* */
            downAndTlrct.setTlrctl(tlrctlDAO.findByPrimaryKey(tlrno, cons));
            /** modify zl 2008-04-08 承德 只有操作员有反洗钱权限的 才查询下拉框* */
//            System.out.println(passwd + "--  --"+ downAndTlrct.getTlrctl().getPasswd());
        } catch (Exception e) {
            new ThrowDaoExHandler().handle(con, e);
        } finally {
            DataSourceUtils.closeConnection(con);
            //DataSourceUtils.closeConnection(cons);
        }
        return downAndTlrct;
    }



DataSource层
Java code

    public static Connection getConnection(ConnectionPool connectionpool)throws SQLException{
        Connection connection = null;
        connection = DriverManager.getConnection("proxool.db_itp_fxq");
        if(connection == null)
            throw new CannotGetJdbcConnectionException("error.getConnection");
        else
            // 不让连接自动提交
            connection.setAutoCommit(false);
        // 解决JDK1.5 连接数据库慢的问题
        ProxySelector.setDefault(null);
        return connection;
    }




------解决方案-----