一个关于数据库连接池对象放置位置的问题

06-05-09 morodos
本人初学jsp+servlet+javabean。认同设计的松耦合的重要性。关于持久层和业务层的设计如下:

首先有一个通用的操作数据库的bean,该bean有一个datasource成员变量ds和一些执行sql语句的方法,这些方法有一个connection局部变量conn,接受sql和Domain Model对象标识等相关参数,根据Model对象标识返回相应的结果集对象。每个方法中有conn=ds.getConnection()语句。(因为考虑事务回滚和多线程将conn声明为局部变量)

然后对每个Domain Model,有一个Servcie Layer对象,或者叫工具bean,业务代理接口。用来完成业务对象的相关操作。其中很多数据库相关的操作要调用通用的数据库操作bean来完成。

最后比如在struts的action中或其他地方调用这个工具bean。

问题是:每个工具bean都new一个通用的数据库操作bean,从而要声明(引用?)一个datasource对象,是否有问题?还是至始至终只有一个datasource对象?

不太明白,望大家不吝帮助。谢谢!

morodos
2006-05-09 23:09
因为业务代理接口要通过调用通用的数据库操作bean完成很多数据库相关的操作.所以要new一个通用的数据库操作bean。

当然可以把通用的数据库操作bean放在application作用域。不过感觉又不好。我想知道我上面的担心是否成立!我如何在IDE中验证我的想法呢?

morodos
2006-05-10 12:05
知道了 将ds定义成static就可以了

morodos
2006-05-10 12:05
还可以用单件模式

morodos
2006-05-10 13:14
说到底,这是一个关于领域模型的架构问题。

serveice--->DAO--->domain object

只不过我的DAO调用的是一个自制通用数据库bean实现持久层,而不是用的hibernate之类的框架。

我的理解,通过jndi查找的datasource应该在通用数据库bean中声明和初始化。然后在application listener 中实例化通用数据库bean到application作用域。

serveice和DAO应该也是整个应用只有一个实例,符合单间模式。不过简单的处理可以全部只在application listener 中实例化。

不知道这样的处理好不好?

猜你喜欢
2Go 1 2 下一页