JSF+HIbernate+Spring结合

    我们在此用到的是spring的AOP、DAO、IOC,其他没有用到,而spring的DAO是建立在Hibernate基础之上的,具体的应用我们将在以下来讲解。
1、添加spring,hibernate,jsf的jar
a、在eclipse的菜单MyEclipse中的菜单项中,选择Hibernate、JSF、Spring,,各自选择的版本是spring2.0,hibernate3.0,jsf1.1。
b、这样各自的jar包就自动的加入到项目中了。
c、各自自动加入的配置文件和java类分别为:
Spring: applicationContext.xml
Hibernate: hibernate.cfg.xml
JSF:faces-config.xml
2、spring配置文件applicationContext.xml中的配置
a、数据源(一个连接池)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
注:org.apache.common.dbcp.BasicDataSource是一个数据库连接池的类,可以用于数据库连接的池化。
    也可以用org.springframework.jdbc.datasource.DriverManagerDataSource这个类来用于数据库连接


<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433</value>
</property>
<property name="username">
<value> 数据库的用户名</value>
</property>
<property name="password">
<value> 数据库的密码</value>
</property>
</bean>
b、Session工厂
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
注:configLocation这个属性的值如下淡紫色,值为hibernate的配置文件,主要用到其中的ORM与表的映射配置文件。
   mappingResources这个属性的值如下绿色,值为ORM与表的映射配置文件。

   这两个属性为只能用其中的一个。

<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="mappingResources">
<list>
      <value>com/synchrobit/synchrofms/pojo/TChargeItem.hbm.xml</value>
         </list>
</property>

注:hibernateProperties是为hibernate的properties文件<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
</props>
</property>
注:用将dataSource的javaBean注入进去
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
c、定义事务操作类
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

d、定义异常
<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
<property name="dataSource">
         <ref bean="dataSource"/>
</property>
</bean>
e、定义hibernate模板
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
<property name="jdbcExceptionTranslator">
         <ref bean="jdbcExceptionTranslator"/>
</property>
</bean>
f、定义实现接口的DAO操作类
<bean id="chargeItemDAO" class="com.synchrobit.synchrofms.dao.implement.ChargeItemDAOImp">
<property name="hibernateTemplate">
         <ref bean="hibernateTemplate"/>
</property>
</bean>
g、定义实现接口的业务目标类
<bean id="chargeItemServiceTarget" class="com.synchrobit.synchrofms.bo.implement.ChargeItemServiceImp">
<property name="chargeItemDAO">
<ref local="chargeItemDAO"/>
</property>
</bean>
h、定义实现事务操作的业务代理类
注:本类是一个代理工厂,根据里面的目标属性返回目标类,transactionAttributes属性用来控制事务操作方法
<bean id="chargeItemService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
         <ref local="transactionManager"/>
</property>
<property name="target">
         <ref local="chargeItemServiceTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
3、 hibernate配置文件hibernate.cfg.xml中的配置
如果在2中第b中用的是configLocation这个属性的话,就需要配置hibernate.cfg.xml这个文件,如果不是的话就没有必要配置了,这里主要介绍的是三者的结合,而spirng实现了与hibernate的无缝结合,所以这里我们省略了。
4、JavaServerFaces配置文件faces-config.xml中的配置
这里我只介绍jsf中的manageBean引用spirng中的JavaBean.
<faces-config>
<application>
      <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver
      </variable-resolver>
      <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>en</supported-locale>
        <supported-locale>es</supported-locale>
      </locale-config>
</application>
</faces-config>

注:以上的org.springframework.web.jsf.DelegatingVariableResolver可以自动加载spring文件。

<managed-bean>
<managed-bean-name>userList</managed-bean-name>
       <managed-bean-class>com.whatever.jsf.UserList
       </managed-bean-class>
       <managed-bean-scope>request</managed-bean-scope>
       <managed-property>
             <property-name>userManager</property-name>
             <value>#{userManager}</value>
       </managed-property>
</managed-bean>

注:#{usermanager}就是spring中申明的业务实现代理类。
5、web.xml配置文件中的配置
<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
注:Javax.faces.CONFIG.FILES是为web.xml设置寻找jsf配置文件的目录。
<listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

注:根据设置的加载文件设置jsf的监听
<context-param>
         <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
注:contextConfigLocation是为web.xml设置寻找jsf配置文件的目录。
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

注:加载spring配置文件的监听器
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>  
<load-on-startup>1</load-on-startup>
</servlet>

注:加载spring配置文件的servlet,它和上面的spring 监听器,只能用一个,多用会有问题的。







你可能感兴趣的:(spring,Hibernate,Web,xml,JSF)