`
taimukang
  • 浏览: 183969 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSF2.1+Spring3.1+JPA(Hibernate3.6)配置实例

    博客分类:
  • J2EE
 
阅读更多

      首先搭建环境,就不具体说了,我用的是eclipse(不是myeclipse),导入必要的jar包,需要特别注意,Spring的两个AOP的jar包也要倒进去,一开始我认为Aop跟我都应用无关,所以没有导入这两个包,带来不少麻烦。

      这里主要讲配置。有两种情况:Pure JPA + Spring和Spring JpaDaoSupport。这两种情况大同小异,主要是细节上有些差别。

      一、Pure JPA + Spring 四个配置文件分别如下:

     1、applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testcases"/>
<property name="username" value="root"/>
<property name="password" value="beijing123"/>
</bean>

<!-- 这里不需要配置 entityFactory -->

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!--
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
-->
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="testcasemanager"/>
</bean>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!--
<tx:annotation-driven transaction-manager="transactionManager" />
-->

<bean id="atcDao" class="com.semc.conversation.DAO.AutoTestCaseDaoImpl">
</bean>

<bean id="caseManager" class="com.semc.conversation.service.CaseManager">
<property name="atcDao" ref="atcDao"/>
</bean>

</beans>

    2、face-config.xml

<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">

<application>

<variable-resolver> org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
<!--
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
-->
</application>


<managed-bean>
<managed-bean-name>LoginBean</managed-bean-name>
<managed-bean-class>com.semc.conversation.control.LoginBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
<managed-bean-name>coBean</managed-bean-name>
<managed-bean-class>com.semc.conversation.control.CaseOperatorBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>caseManager</property-name>
<value>#{caseManager}</value>
</managed-property>
</managed-bean>
</faces-config>

    在这里直接引用了Spring Context中的bean。

    3、persistence.xml(在META-INF路径下)

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="testcasemanager" transaction-type="RESOURCE_LOCAL">

<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.semc.conversation.model.Auto_cases</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

   4.创建工程的时候选择支持JSF,可以在web.xml中自动产生关于JSF的配置,然后在web.xml中加入以下配置:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

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

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

 

    5、entity

@Entity
@Table(name = "auto_cases")
public class Auto_cases implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;

@Column(name="case_name")
private String case_name;

@Column(name="in_class")
private String in_class;

@Column(name="in_package")
private String in_package;

@Column(name="function_tested")
private String function_tested;

@Column(name="test_steps")
private String test_steps;

@Column(name="covered_manual_case_id")
private String covered_manual_case_id;

@Column(name="comments")
private String comments;
......
geter and setter
}

    6.Dao的实现类

@Repository
@Transactional
public class AutoTestCaseDaoImpl implements AutoTestCaseDao{
    private EntityManager em = null;
    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

    @Override
    public void addCase(Auto_cases atc) {
        try{ 
            em.persist(atc);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

   7. testcase:

public class AutoTestCaseDaoImplTest{

private static ApplicationContext ctx;
private static AutoTestCaseDao atcd ;

@Before //在每个测试用例方法之前都会执行
public void init(){
// ctx=new ClassPathXmlApplicationContext("WEB-INF/applicationContext.xml");

String path="WebContent/WEB-INF/applicationContext.xml";
ctx = new FileSystemXmlApplicationContext(path);
atcd=(AutoTestCaseDao)ctx.getBean("atcDao");
}

@After //在每个测试用例执行完之后执行
public void destory(){
}

@Test
public void testAdd(){

for(int i=0;i<3;i++){
Auto_cases atc = new Auto_cases();
atc.setCase_name("Auto test case "+i);
atc.setComments("comments "+i);
atc.setCovered_manual_case_id(String.valueOf(626722+i));
atc.setFunction_tested("function "+i);
atc.setIn_class("ConversationListActivity");
atc.setIn_package("com.sonyericsson.conversations");
atc.setTest_steps("no steps");
atcd.addCase(atc);
}
assertTrue(atcd.count()==3);
}
}

      在这种情况下,Dao所需要的entityManager是通过Dao的实现类中的setter方法注入的,而不是通过在applicationContext.xml中Dao的配置注入的。

 

      二、JPA+JpaDaoSuppert

      除了以下两点,其它与前面的情况都一样:

      1、Dao的实现类

@Repository
@Transactional
public class AutoTestCaseDaoImpl extends JpaDaoSupport implements AutoTestCaseDao{ 
   @Override
    public void addCase(Auto_cases atc) {
        logger.info("saving Player instance");
        try {
            getJpaTemplate().persist(atc);
            logger.info("save successful");
        } catch (RuntimeException re) {
            logger.error("save failed", re);
            throw re;
     }
}
}

 

      2、在applicationContext.xml中,通过对Dao的配置注入EntityManager

 

<bean id="atcDao" class="com.semc.conversation.DAO.AutoTestCaseDaoImpl">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

 

 

分享到:
评论

相关推荐

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP...

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP...

    Spring in Action(第2版)中文版

    16.4.3在jsf页面中使用springbean 16.4.4在jsf中暴露应用程序环境 16.5spring中带有dwr的支持ajax的应用程序 16.5.1直接web远程控制 16.5.2访问spring管理的beandwr 16.6小结 附录a装配spring a.1下载spring ...

    Spring中文帮助文档

    2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) ...

    Spring API

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring Framework Reference Documentation

    - 提供了对 JDBC、JPA、Hibernate 等数据库访问技术的支持。 - 还支持其他非关系型数据库,如 MongoDB、Redis 等。 - **2.2.5 Web** - 支持基于 Servlet 的 Web 应用程序和 RESTful Web 服务。 - 包含了 MVC ...

    JAVA程序开发大全---上半部分

    9.4 Hibernate应用实例:基于Struts+Hibernate的登录系统 155 9.5 本章小结 160 第10章 Spring框架的开发及应用 161 10.1 Spring框架概述 161 10.2 Spring框架中的IoC编程 162 10.2.1 控制反转的原理 163 10.2.2 ...

    J2EE应用开发详解

    17 2.1 构建开发环境 17 2.1.1 安装JDK 17 2.1.2 安装Tomcat 21 2.1.3 安装Eclipse 23 2.2 配置开发环境 23 2.3 小结 26 第3章 Java的反射机制 27 3.1 Java反射API 27 3.2 加载类的实例 29 3.2.1 加载class对象的两...

    Spring攻略(第二版 中文高清版).part1

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    Spring攻略(第二版 中文高清版).part2

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

Global site tag (gtag.js) - Google Analytics