再续SSH+Xfire+Proxool开发框架整合之数据库平台移植

来源:互联网 发布:淘宝客营销计划是什么 编辑:程序博客网 时间:2024/05/16 08:35

转载请注明出处:http://blog.csdn.net/wudiwo/article/details/8656934  

  由于前面提到过SSH+xfire+proxool框架整合,这里不在熬述,这里重点讲一下该框架分别与MySQL 跟Oracle数据库结合的不同点。

 先看一下MySQL数据库是如何在里面进行配置的,这里主要工作都是由spring来完成的,spring在里面主要完下面的工作:

  (1)、利用数据库连接池来配置数据源

  (2)、生命Hibernate事务,并将事务注册到逻辑对象中去

1、装配数据源代码如下: 

<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"        value="org.logicalcobwebs.proxool.ProxoolDriver" />    <property name="url" value="proxool.dbs" />  // 这里“proxool.dbs”后缀要和proxool.xml 文件的中 <alias>标签的值保持一致</bean>
2、 其中在proxool.xml 文件中的配置如下:

  <proxool>    <alias>dbs</alias>    <driver-url>jdbc:mysql://localhost:3306/easylife</driver-url>    <driver-class>com.mysql.jdbc.Driver</driver-class>    <driver-properties>      <property name="user" value="root"/>      <property name="password" value="root"/>      <property name="useUnicode" value="true" />            <property name="characterEncoding" value="UTF-8" />    </driver-properties>    <maximum-connection-count>100</maximum-connection-count>    <minimum-connection-count>10</minimum-connection-count>    <house-keeping-sleep-time>90000</house-keeping-sleep-time>    <maximum-new-connections>10</maximum-new-connections>    <prototype-count>5</prototype-count>    <test-before-use>true</test-before-use>    <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>  </proxool>

3、hibernate 事务声明如下:

<!-- 事务的配置 start --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory"><ref local="sessionFactory" /></property></bean><bean id="txProxyTemplate" abstract="true"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop>// 这里可以根据自己情况进行添加</props></property></bean><!-- 事务的配置 end -->
4、最后是hibernateProperties的配置,这里也可以配置在hibernate.cfg.xml,这里是在applicationContext.xml中的写法,hibernate.cfg.xml的写法下面在配置oracle数据库的时候给出。

<!-- mysql 的配置--><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.connection.autocommit">true</prop><prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop><prop key="hibernate.connection.release_mode">after_statement</prop></props></property><property name="mappingResources"><list><value>com/easylife/menu/vo/xml/MenuTable.hbm.xml</value><value>com/easylife/detail/vo/xml/DetailcacheTable.hbm.xml</value></list></property>

完成的上面的四步,mysql的配置基本完成。

与mysql相比 1 、3 步的配置是完全一样的,这里看下剩下的两部分,oracle数据库的配置写法:

2、proxool.xml 文件的写法:

     <proxool><alias>dbs</alias><driver-url>jdbc:oracle:thin:@10.18.11.26:1521:ossoradb2</driver-url><driver-class>oracle.jdbc.driver.OracleDriver</driver-class><driver-properties><property name="user" value="resurvey" /> <property name="password" value="resurvey" /></driver-properties>         <house-keeping-sleep-time>9000</house-keeping-sleep-time>          <proxool.simultaneous-build-throttle>50</proxool.simultaneous-build-throttle>          <prototype-count>5</prototype-count>          <maximum-connection-count>100</maximum-connection-count>          <minimum-connection-count>10</minimum-connection-count>          <house-keeping-test-sql>select CURDATE()</house-keeping-test-sql>         </proxool>  

4、第四部分oracle部分的配置 如下:

<!-- oracle 的配置start <property name="hibernateProperties">              <props>                  <prop key="hibernate.connection.provider_class">                      org.hibernate.connection.ProxoolConnectionProvider                  </prop>                  <prop key="hibernate.proxool.xml">proxool.xml</prop>                  <prop key="hibernate.proxool.pool_alias">                      dbs                </prop>                  <prop key="hibernate.show_sql">true</prop>                  <prop key="hibernate.format_sql">false</prop>                  <prop key="current_session_context_class">thread</prop>              </props>          </property>          <property name="mappingResources"><list><value>com/easylife/menus/vo/xml/MenusTable.hbm.xml</value><value>com/easylife/menu/vo/xml/MenuTable.hbm.xml</value><value>com/easylife/detail/vo/xml/DetailcacheTable.hbm.xml</value></list></property>

上面的部分我们写到hibernate.cfg.xml 文件中如下:

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration><session-factory><!--  这里面的信息配置在了applicationContext.xml 里面的<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property><property name="proxool.pool_alias">dbs</property><property name="proxool.xml">proxool.xml</property><property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>    <property name="connection.autocommit">true</property><property name="format_sql">true</property><property name="show_sql">true</property><mapping resource="com/easylife/menus/vo/xml/MenusTable.hbm.xml" />--></session-factory> </hibernate-configuration>
 单独配置在hibernate.cfg.xml中也要在applicationContext.xml的配置文件里面引入:

<property name="configLocation"value="classpath:hibernate.cfg.xml"></property>

这里我在配置的过程中出现过这样一个问题,可以看到在配置mysql的第四步中有这样一个标签:

                   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect  </prop>
我仿效配置mysql的写法在配置oracle第四步分的时候添加如下代码:

                     <prop key="hibernate.dialect">                org.hibernate.dialect.Oracle10gDialect</prop>
之后我部署项目的时候部署不上,异常信息大概是找不到org.hibernate.dialect.Oracle10gDialect的来源,在网上查了很多资料也没找到原因,网上很多帖子都是要把这个标签添加在第四步配置上的,而我这个加上就出异常,后来干脆就去掉了,去掉后项目能部署上,至今还没发现因为少了这个配置会出什么问题。如果你知道是什么原因请给我留言。

再看看在业务逻辑服务类上添加Dao和事务的配置:

        <bean id="basedao" class="com.easylife.dao.BaseDAOImpl"><property name="sessionFactory">   <ref bean="sessionFactory" /></property></bean><bean id="detailService" parent="txProxyTemplate">// 添加事务        <property name="target" ><bean class="com.easylife.detail.service.impl.DetailCacheServiceImpl"><property name="baseDao">  <ref bean="basedao" /></property></bean></property></bean>

可以说SSH+xfire+proxool不管是配置MySql还是oracle除了配置文件上的这点差异外,在具体编写的逻辑代码上基本上一样的。由此看样看出SSH这种框架的优点还是值得学习与推广的。

转载请注明出处:http://blog.csdn.net/wudiwo/article/details/8656934  















   




原创粉丝点击