Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

Struts2+Spring2+Hibernate3.2配置参考

Part 1, web.xml中的部分配置
 <!-- Spring-Context Loader -->

    
<context-param>

        
<param-name>contextConfigLocation</param-name>

        
<param-value>classpath*:spring/*.xml</param-value>

    
</context-param>

    

     
<!-- i18n resource boundle file -->

    
<context-param>

        
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>

        
<param-value>i18n/messages</param-value>

    
</context-param>

    

    
<!-- Character Encoding filter -->

    
<filter>

        
<filter-name>encodingFilter</filter-name>

        
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        
<init-param>

            
<param-name>encoding</param-name>

            
<param-value>UTF-8</param-value>

        
</init-param>

    
</filter>

    

    
<!--Hibernate Open Session in View Filter-->

    
<filter>

        
<filter-name>hibernateFilter</filter-name>

        
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

    
</filter>

    

    
<!-- Struts2 config -->

    
<filter>

        
<filter-name>struts-cleanup</filter-name>

        
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

    
</filter>

    
<filter>

        
<filter-name>struts</filter-name>

        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    
</filter>

    

    
<filter-mapping>

        
<filter-name>encodingFilter</filter-name>

        
<url-pattern>*.action</url-pattern>

    
</filter-mapping>

    
<filter-mapping>

        
<filter-name>encodingFilter</filter-name>

        
<url-pattern>*.jsp</url-pattern>

    
</filter-mapping>

    
<filter-mapping>

        
<filter-name>hibernateFilter</filter-name>

        
<url-pattern>*.action</url-pattern>

    
</filter-mapping>

   
<filter-mapping>

        
<filter-name>struts-cleanup</filter-name>

        
<url-pattern>/*</url-pattern>

    
</filter-mapping>

    
<filter-mapping>

        
<filter-name>struts</filter-name>

        
<url-pattern>/*</url-pattern>

    
</filter-mapping>

 

    
<!--Spring ApplicationContext Load -->

    
<listener>

        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    
</listener>

 

    
<!-- Spring Introspector Memory leak -->

    
<listener>

        
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

    
</listener>

    

    
<!-- Support Spring bean in session scope -->

    
<listener>

        
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

    
</listener>


对OpenSessionInViewFilter展开: OpenSessionInViewFilter中做了什么事情呢?这里只说结论,具体需要参考Spring源码 。第一件事情,把Hibernate的Session放入整个web的request周期内,即,web的request结束,session才关闭。第二件事情,获取到session后,把它的flush mode 设为FlushMode.NEVER,关闭session时,与trasaction中配置做对比,如果transaction不是readonly,就 会把FlushMode.NEVER转成FlushMode.AUTO,即有了写权限。否则,就没有写权限。参考《使用OpenSessionInView模式时的一个异常问题解决方法》和《Spring+Hibernate中OpenSessionInView模式运用》。

Part 2.
数据访问的Spring配置,3个Bean:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans default-autowire="byName" default-lazy-init="true">

 

    
<!-- Data source definition,use Apache DBCP connection pool -->

    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

        
<property name="driverClassName" value="${jdbc.driverClassName}"/>

        
<property name="url" value="${jdbc.url}"/>

        
<property name="username" value="${jdbc.username}"/>

        
<property name="password" value="${jdbc.password}"/>

    
</bean>

 

    
<!--Hibernate SessionFatory-->

    
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

        
<property name="dataSource" ref="dataSource"/>

        
<property name="annotatedClasses">

            
<list>

                
<value>com.hscib.pfms.app.model.User</value>

            
</list>

        
</property>

        
<property name="hibernateProperties">

            
<props>

                
<prop key="hibernate.dialect">${hibernate.dialect}</prop>

                
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>

                
<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>

                
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>

                
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>

            
</props>

        
</property>

    
</bean>

    

    
<!-- Transaction manager for a single Hibernate SessionFactory -->

    
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        
<property name="sessionFactory" ref="sessionFactory"/>

    
</bean>

</beans>

上面代码读过配置文件,配置部分代码如下:

<!-- Reading configuration file -->

    
<bean id="propertyConfigurer"

        class
="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        
<property name="locations">

            
<list>

                
<value>classpath*:config/jdbc.properties</value>

                
<value>classpath*:config/hibernate.properties</value>

            
</list>

        
</property>

    
</bean>

 

关于sessionFactory的配置,如果不用Annotation的话,配置代码如下:

<!--Hibernate SessionFatory-->

    
<bean id="sessionFactory"

    class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        
<property name="dataSource" ref="dataSource" />

        
<property name="mappingDirectoryLocations">

            
<list>

                
<value>

                    classpath*:/com/staplesnrc/commons/domain/

                
</value>

                
<value>

                    classpath*:/com/staplesnrc/plugins/security/domain/

                
</value>

                
<value>

                    classpath*:/com/staplesnrc/plugins/menu/domain/

                
</value>

            
</list>

        
</property>

 

        
<property name="hibernateProperties">

            
<props>

                
<prop key="hibernate.dialect">

                    ${hibernate.dialect}

                
</prop>

                
<prop key="hibernate.show_sql">

                    ${hibernate.show_sql}

                
</prop>

                
<prop key="hibernate.max_fetch_depth">

                    ${hibernate.max_fetch_depth}

                
</prop>

                
<prop key="hibernate.cache.use_query_cache">

                    ${hibernate.cache.use_query_cache}

                
</prop>

                
<prop key="hibernate.cache.provider_class">

                    ${hibernate.cache.provider_class}

                
</prop>

            
</props>

        
</property>

    
</bean>

 

Part 3. 事务管理的配置:

<!-- Enable @Transactional support -->

<tx:annotation-driven />

 

<!-- Enable @AspectJ support -->

<aop:aspectj-autoproxy />

 

<aop:config proxy-target-class="true">

        
<aop:advisor

            
pointcut="execution(* com.hscib.pfms.app..*Manager.*(..))"

            advice-ref
="txAdvice" />

        
<aop:advisor

            
pointcut="execution(* com.hscib.pfms.core.dao.*Dao.*(..))"

            advice-ref
="txAdvice" />

</aop:config>

 

<!-- Basic Transaction definition,refered by aop -->

<tx:advice id="txAdvice">

        
<tx:attributes>

            
<tx:method name="get*" read-only="true" />

            
<tx:method name="find*" read-only="true" />

            
<tx:method name="*" />

        
</tx:attributes>

</tx:advice>

上面采用了aspectJ的配置方式,如果用旧的Spring1.2的配置,相关代码配置如下:

<bean id="baseTxService"

        class
="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

        abstract
="true">

        
<property name="transactionManager" ref="transactionManager" />

        
<property name="proxyTargetClass" value="true"/>

        
<property name="transactionAttributes">

        
<props>

        
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

        
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>

        
<prop key="save*">PROPAGATION_REQUIRED</prop>

        
<prop key="update*">PROPAGATION_REQUIRED</prop>

        
<prop key="remove*">PROPAGATION_REQUIRED</prop>

        
</props>

        
</property>

        
</bean>

 同样,下面列出具体Bean的两种配置,首先支持AspectJ的配置

<bean id="userManager" class="com.hscib.pfms.app.manager.demo.UserManager"/>

下面是Spring1.2的配置

<bean id="userManager" parent="baseTxService">

        
<property name="target">

            
<bean class="com.hscib.pfms.app.manager.demo.UserManager" />

        
</property>

</bean>

Part3 Struts的配置,struts.xml内容

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

 

<struts>

    
<!-- Constants -->

    
<constant name="struts.objectFactory" value="spring" />

    
<constant name="struts.i18n.encoding" value="UTF-8" />

    
<constant name="struts.custom.i18n.resources" value="i18n/messages" />

 

    
<!-- Include Struts defaults -->

    
<include file="struts-default.xml" />

 

    
<package name="default" extends="struts-default">

        

    
</package>

 

    
<package name="demo" extends="struts-default" namespace="/demo">

 

        
<action name="save" class="userAction" method="save">

            
<result type="redirect-action">list</result>

        
</action>

 

        
<action name="list" class="userAction" method="list">

            
<result>/pages/demo/user.jsp</result>

        
</action>

        

        
<action name="delete" class="userAction" method="delete">

            
<result type="redirect-action">list</result>

        
</action>

         

        
<action name="edit" class="userAction" method="edit">

            
<result>/pages/demo/user.jsp</result>

        
</action>

    
</package>

</struts>

注意:struts.objectFactory采用了Spring的Bean方式创建Action.

下面列出Spring方式配置的Action的配置文件的样子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans default-autowire="byName" default-lazy-init="true">

    
<bean id="userAction" class="com.hscib.pfms.app.web.demo.UserAction" scope="prototype">

        
<property name="userManager" ref="userManager"/>

    
</bean>

</beans>

事实上Struts的配置文件有很多种,可以参考官方文档。








 

 

posted on 2007-05-08 17:17 MingIsMe 阅读(1090) 评论(0)  编辑  收藏 所属分类: 06 J2EE

 
Powered by:
BlogJava
Copyright © MingIsMe