现在是这样.
用户有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; }
------解决方案--------------------
不传request的话,你连session对象都获取不到,如何去获取里面的值?要么你就在内存里面开辟一个空间,来引用到application中的session。这样你通过这个来获取session对象。当然要记住的是,当session失效的时候要去清理这个空间里面的数据。
------解决方案--------------------
按道理 来说,是应该可以取到Session的。
还有一个方法 就是conn 提前创建,在Action中就创建。如Hibernate 的OpenSessionViewFilter那样。