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

 
 

转载请注明出处: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  















   




你可能感兴趣的:(再续SSH+Xfire+Proxool开发框架整合之数据库平台移植)