《基于J2EE Struts框架的课程设计实训项目——BBS论坛系统——重构基于Hibernate框架的数据库连接方式并进行单元测试第1部分.doc》由会员分享,可在线阅读,更多相关《基于J2EE Struts框架的课程设计实训项目——BBS论坛系统——重构基于Hibernate框架的数据库连接方式并进行单元测试第1部分.doc(13页珍藏版)》请在三一办公上搜索。
1、杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料基于J2EE Struts框架的课程设计实训项目BBS论坛系统重构基于Hibernate框架的数据库连接方式并进行单元测试(第1/2部分)1.1.1 Hibernate中的各种数据库连接池的支持类1、org.hibernate.connection.DriverManagerConnectionProvider(1)主要的作用DriverManagerConnectionProvider 类是Hibernate系统中内带的数据库连接池的实现类,并且DriverManagerConnectionProvider类继承了ConnectionP
2、rovider接口,主要是使用用户提供的JDBC驱动程序及与数据库有关的各种连接参数来连接数据库,或者使用连接池的方式来连接数据库。 (2)DriverManagerConnectionProvider这个类只是初始化了最基本的连接配置1) hibernate.connection.driver_class(JDBC驱动类)2) hibernate.connection.pool_size(连接池容量的上限数目)3) hibernate.connection.autocommit(允许被缓存的JDBC连接开启自动自动提交)4) hibernate.connection.isolation(设置
3、JDBC事务隔离级别,可查看java.sql.Connection来了解各个值的具体意义,但请注意多数数据库都不支持所有的隔离级别,取值1,2,4,8)。因此,无论你是使用JDBC还是使用连接池方式,这几个最基本的设置都是要先初始化的。其中pool_size的默认值为20。2、org.hibernate.connection.DatasourceConnectionProvider它通过JNDI的方式来查找数据源来获得连接。3、org.hibernate.connection.C3P0ConnectionProvider对C3P0连接池的支持类。4、org.hibernate.connecti
4、on.ProxoolConnectionProvider对Proxool连接池的支持类。在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高。1.1.2 重构系统中的各种数据库连接的配置文件1、org.springframework.beans.factory.config.PropertyPlaceholderConfigurer组件(1)以配置发生应用它利用该组件,可
5、以在Spring的各种配置文件中使用外部属性文件中所定义的各个属性项目,从而可以允许多个不同的XML文件能够共用同一个属性文件中的不同属性项目的值。 classpath:com/starxing/test/jdbc.properties !- 也可以通过使用locations属性来定义出多个不同的配置文件 classpath:config/maxid.propertiesclasspath:config/jdoserver.properties-在上面定义了一个PropertyPlaceholderConfigurer类的实例,并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处
6、理器,并将使用定义在文件中的属性来代替所有的占位符($.value)。也可以利用“file:”进行物理目录路径定义。利用这种技术,我们可以从applicationContext.xml中移除所有特定于主机的配置属性项目的值到一个共用的属性文件中。因为PropertyPlaceholderConfigurer是作为一个“Bean Factory Post-Processor”的实现,可以用来将BeanFactory定义中的各个属性值放置到另一个单独的Java Properties格式的文件中。(2)以编程方式应用它如果要在BeanFactory中使用“Bean Factory Post-Proc
7、essor”的实现,则必须手动运行:XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(beans.xml);PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();cfg.setLocation(new FileSystemResource(jdbc.properties);cfg.postProcessBeanFactory(factory);PropertyPlaceHolderConfigurer不仅仅在你指定的Por
8、perties文件中查找属性, 如果它在其中没有找到你想使用的属性,它还会在Java的系统properties中查找。2、在Spring的其它配置定义中引用属性配置文件中的某个名称属性$某个属性名称3、“Bean Factory Post-Processor”的含义官方解释是这样的:A bean factory post-processor is a java class which implements the org.springwork.beans.factory.config.BeanFactoryPostProcessor interface. It is executed manu
9、ally (in the case of the BeanFactory) or automatically (in the case of the ApplicationContext) to apply changes of some sort to an entire BeanFactory, after it has been constructed.基本的意思是:“Bean Factory Post-Processor”实现了org.springwork.beans.factory.config.BeanFactoryPostProcessor接口,它在BeanFactory的情况下
10、能够被手动地执行,而在ApplicationContext的条件下则会被自动地执行。利用它可以实现在一个类的实例被构造出来之后,对整个BeanFactory进行修改。因为它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中。4、在项目中的各种与数据库连接有关的Spring配置文件中引用外部属性文件中的属性项目(1)在classNameConfig.properties属性文件中定义有关的属性项目(2)修改SpringWithHibernateCFGXml.xml和SpringLinkHibernate.xml配置文件5、修改Spr
11、ingWithHibernateCFGXml.xml配置文件(1)添加一个PropertyPlaceholderConfigurer组件的定义 classpath:classNameConfig.properties (2)修改SpringWithHibernateCFGXml.xml中的原来的属性以引用它们 $JDBC_DBDriver $JDBC_URL $dbUserName $dbUserPassWord。 其它的属性项目6、再执行应用SpringWithHibernateCFGXml.xml配置文件的测试用例(1)SpringWithHibernateCFGXml.xml配置文件的代
12、码示例 classpath:classNameConfig.properties !- 与proxool.xml以及web.xml结合使用 org.logicalcobwebs.proxool.ProxoolDriver proxool.DBPool - $JDBC_DBDriver $JDBC_URL $dbUserName $dbUserPassWord DBPool !- 加下面的项目将出现数据类型转换的错误! 90000 - 5 100 10 true true org.hibernate.dialect.MySQLDialecttruetrueorg.hibernate.connec
13、tion.ProxoolConnectionProvidertrueorg.hibernate.cache.EhCacheProviderdebugUserInfoPO.hbm.xmlAdminUserInfoPO.hbm.xmlBBSInfoPO.hbm.xmlBBSTitleInfoPO.hbm.xmlBBSReplyInfoPO.hbm.xml !- 由于对sessionFactory属性对象,应用了Autowired注释配置,因此不再需要了set方法 - com.px1987.webbbs.dao.BBSReplyInfoManageDAOInterface PROPAGATION_R
14、EQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly (2)执行的结果如下图所示1.1.3 重构基于Hibernate的C3P0数据库连接方式为DBCP并测试其功能实现的效果1、添加有关的系统包在项目中添加如下与Hibernate的数据库连接方式有关的各个系统库文件:commons-pool-1.2.jar、commons-dbcp-1.2.2.jar、commons-collections-3.1.jar。2、修改hibernate.cfg.xml文件并增加下面与DBCP有关的属性项目100 1 60000 10 100 1 60000 103、再执行测试用例而状态提示为:对于连接池的具体应用,由于在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。因此官方推荐使用c3p0或Proxool连接池。因此,尽管在hibernate.cfg.xml文件中配置了DBCP,但实际并没有被支持。此时Hibernate将自动采用内带的数据库连接池的实现来支持。杨教授大学堂,版权所有,盗版必究。 13/13页