MVC Model Layer
在
spring.xml
中利用
dataSource
作为基础的数据源/连接池;
transactionManager
作为默认的JDBC事务管理器,被用来管理基于JDBC数据源的业务(Business)层的事务。
利用Spring2.0提供的AOP自动代理的底层架构(基于 AspectJ 切点语言),我们可以很方便的对特定的业务类、方法进行事务拦截、包装等处理, 例如我们可以这样定义一个对于JDBC事务的拦截器:
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" /> <tx:method name="delete*" /> <tx:method name="update*" /> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice>
很明显,它对于"insert", "delete", "update"开头的方法进行事务包装。 我们可以通过下面的配置使其绑定于特定的业务服务类:
<aop:config> <aop:advisor pointcut="execution(* *..IUserService.*(..))" advice-ref="txAdvice" /> </aop:config>
以上的应用示范位于ClearWork Sample的
spring-sample.xml
,以供参考 。
作为轻量级ORM数据管理框架的优秀代表,Hibernate被ClearWork良好的支持和集成。同样的,需要在 spring.xml 中利用 dataSource 作为基础的数据源/连接池;由于各模块需要定义自己的ORM文件(.hbm),因此 sessionFactory 在全局配置中被声明为抽象的(abstract), 您需要在模块级的Spring配置中继承这个sessionFactory,指定ORM配置(.hbm文件),例如:
<bean id="sampleSessionFactory" parent="sessionFactory"> <property name="mappingResources"> <list> <value> net\sf\clearwork\sample\domain\hibernate\CContact.hbm.xml </value> <value> net\sf\clearwork\sample\domain\hibernate\CNews.hbm.xml </value> <value> net\sf\clearwork\sample\domain\hibernate\CUser.hbm.xml </value> </list> </property> </bean>
相应的,Hibernate的事务管理器也需要在相应的模块级Spring配置中指定:
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sampleSessionFactory" /> </bean>
接下来的情况与JDBC基本相同。利用Spring2.0提供的AOP自动代理的底层架构(基于 AspectJ 切点语言),我们可以很方便的对特定的业务类、方法进行事务拦截、包装等处理, 例如我们可以这样定义一个对于Hibernate事务的拦截器:
<tx:advice id="txAdviceHibernate" transaction-manager="hibernateTransactionManager"> <tx:attributes> <tx:method name="insert*" /> <tx:method name="delete*" /> <tx:method name="update*" /> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice>
很明显,它对于"insert", "delete", "update"开头的方法进行事务包装。 我们可以通过下面的配置使其绑定于特定的业务类:
<aop:config> <aop:advisor pointcut="execution(* *..IUserService.*(..))" advice-ref="txAdviceHibernate" /> </aop:config>
以上的应用示范位于ClearWork Sample的
spring-sample.xml
,以供参考 。
Proxool这个开源项目可以提供对您选择的任何数据驱动的连接池封装。它可以非常简单的移植到现存的代码中。 完全可配置,能够有效、及时的回收连接资源;能够智能的分配、重用数据库连接资源。 快速,成熟,健壮。可以透明地为您现存的JDBC驱动程序增加连接池功能。 ClearWork对其进行了有效的集成,使之能方便被使用在Spring框架中,作为数据源(DataSource)代码如下:
<bean id="dataSource" lazy-init="false" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="alias" value="ClearWork Connection Pool" /> <property name="statistics" value="1m,15m,1d" /> <property name="simultaneousBuildThrottle" value="25" /> <property name="maximumConnectionCount" value="25" /> <property name="driver" value="${jdbc.driverClassName}" /> <property name="driverUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="delegateProperties"> <value>user=${jdbc.username}</value> <!--value>user=sa,password=sa</value--> </property> </bean>
注意: delegateProperties 这个属性的配置是必须的,你需要在这里再次指定连接数据库的user或user/password, 它是为了修正Proxool现存版本的一个小Bug。
Proxool为您提供了一个基于Web的管理控制台,能够方便的管理数据库连接池。
此管理控制台是一个Servlet,需要在web.xml中配置:
<servlet> <servlet-name>proxoolAdmin</servlet-name> <servlet-class> net.sf.clearwork.persistent.proxool.AdminServlet </servlet-class> </servlet>