`
周一Monday
  • 浏览: 346774 次
  • 来自: 北京
社区版块
存档分类
最新评论

JSF1.2+JPA2.0+Spring3.1整合开发

阅读更多

导入必须的Jar包

 

JSF1.2的依赖包

${jsf_home}\mojarra-1.2_15-b01-FCS\lib
jsf-api.jar
jsf-impl.jar
额外
jstl.jar

 

JPA用Hibenrate3.6.0实现的依赖包

 

${hibernate_home}\hibernate-distribution-3.6.0.Final\hibernate3.jar
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\required\*
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\jpa\*
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\optional\c3p0\* (加入C3P0)
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\optional\ehcache\* (加入缓存)

slf4j-nop-1.6.1.jar(可选)
backport-util-concurrent.jar (缓存依赖包)


Spring3.1.0的依赖包

 

${spring_home}\spring-framework-3.1.0.RELEASE\dist\
org.springframework.aop-3.1.0.RELEASE.jar
org.springframework.asm-3.1.0.RELEASE.jar
org.springframework.aspects-3.1.0.RELEASE.jar
org.springframework.beans-3.1.0.RELEASE.jar
org.springframework.context-3.1.0.RELEASE.jar
org.springframework.core-3.1.0.RELEASE.jar
org.springframework.expression-3.1.0.RELEASE.jar
org.springframework.jdbc-3.1.0.RELEASE.jar
org.springframework.orm-3.1.0.RELEASE.jar
org.springframework.test-3.1.0.RELEASE.jar
org.springframework.transaction-3.1.0.RELEASE.jar
org.springframework.web-3.1.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.junit-4.7.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

 

MySQL驱动
mysql-connector-java-5.1.7-bin.jar

 

因为开发很简单,就是CRUD...

所以能省略的就尽量省略了。。。

 

package org.monday.app.domain;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "user_table")
public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;

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

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

	@Temporal(TemporalType.DATE)
	@Column(name = "birthday")
	private Date birthday;

	//......

}

  

3. Dao实现类

 

package org.monday.app.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.monday.app.dao.UserDao;
import org.monday.app.domain.User;
import org.springframework.stereotype.Repository;

@Repository(value = "userDao")
public class UserDaoImpl implements UserDao {

	/**
	 * Spring3.1推荐使用原生的EntityManager 
	 * 而JpaDaoSupport和JpaTemplate被标记为过时
	 */
	@PersistenceContext(unitName = "jpa")
	private EntityManager entityManager;

	@Override
	public void save(User user) {
		entityManager.persist(user);
	}

	@Override
	public void update(User user) {
		entityManager.merge(user);
	}

	@Override
	public void delete(Integer id) {
		entityManager.remove(findById(id));
	}

	@Override
	public User findById(Integer id) {
		return entityManager.find(User.class, id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<User> findAll() {
		Query query = entityManager.createQuery("from User");
		// 转换为HibernateQuery
		// if (query instanceof org.hibernate.ejb.QueryImpl) {
		// ((org.hibernate.ejb.QueryImpl) query).getHibernateQuery().setCacheable(true);
		// }
		return query.getResultList();
	}

}

 

 

 

3.Service实现类

 

就到对Dao的简单调用

 

 

现在,除了Web层组件,其他的组件都准比完毕。接下来,整合JPA+Spring

 

在“源文件”的目录下建立一个META-INF文件夹,里面建立一个persistence.xml文件。这个就不解释了。

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">

	
	<!-- Spring整合JPA只要指定持久化单元的名称就可以了 -->
	<persistence-unit name="jpa"/>

</persistence>

 

 

 

下面,编写Spring的配置文件.beans.xml 这个是重点

 

 

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

	<!-- 引入注解扫描器 -->
	<context:annotation-config />

	<!-- 引入属性文件 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置要扫描的包 -->
	<context:component-scan base-package="org.monday.app.dao.impl"/> 
	<context:component-scan base-package="org.monday.app.service.impl"/> 

	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
				<property name="driverClass" value="${jdbc.driverClass}"/>
				<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
				<property name="user" value="${jdbc.user}"/>
				<property name="password" value="${jdbc.password}"/>
				<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
				<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
				<property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>
				<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
			</bean>
		</property>
	</bean>
	
	<!-- 配置EntityManagerFactory -->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="persistenceUnitName" value="jpa" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<property name="database" value="MYSQL" /> 
				<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
				<property name="generateDdl" value="true" />
				<property name="showSql" value="true" />
			</bean>
		</property>
		<property name="jpaProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<!-- 配置二级缓存 -->
				<prop key="hibernate.cache.use_second_level_cache">true</prop>
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
			</props>
		</property>
		<!-- 配置要扫描的实体类 -->
		<property name="packagesToScan">
			<list>
				<value>classpath*:org.monday.app.domain.*</value>
			</list>			
		</property>
	</bean>
	
	<!-- 配置事务 -->
	<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory"/>
	</bean>
	<tx:annotation-driven transaction-manager="txManager"/>
	
	
</beans>

 

 

 

自此,JPA+Spring 整合完毕。

 

 

 下面也是重点JSF+Spring 整合

 

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

	<!-- 指定Spring的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>

	<!-- 注册Spring的WEB监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- JSF+Spring整合必须的 -->
	<listener>
		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>

	<!-- 配置JSF -->
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>com.sun.faces.validateXml</param-name>
		<param-value>true</param-value>
	</context-param>

	<servlet>
		<servlet-name>jsf</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jsf</servlet-name>
		<!-- <url-pattern>/faces/*</url-pattern> -->
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>

 

  

这样JSF+Spring就配置好了。

 

但是,还有一个问题,JSF的托管bean(类似于Struts的Action)怎么取得Service组件。

 

首先,在代码中取得Service组件是这样的。

package org.monday.app.web.action;

import java.util.List;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.monday.app.domain.User;
import org.monday.app.service.UserService;

public class ListAction {

	private List<User> list;

	private UserService userService;

	/** 注入Service,不要使用注解注入 */
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	/** 列表 */
	public List<User> getList() {
		list = userService.getAll();
		return list;
	}

	public void setList(List<User> list) {
		this.list = list;
	}

	/** 删除 */
	public void delete() throws Exception {
		// 取得id参数
		ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
		Integer id = Integer.parseInt(ctx.getRequestParameterMap().get("id"));

		userService.delete(id);
	}
}

  

 

 

但是,这样还不够,因为,JSF还不知道Sprig容器管理的Service组件。

所以,还要在JSF的配置文件faces-config.xml中,做点“手脚”。

 

<?xml version="1.0" encoding="UTF-8"?>
<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_1_2.xsd" version="1.2">

	<!-- 整合JSF+Spring -->
	<application>
		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
	</application>


	<!-- 配置托管Bean -->
	<managed-bean>
		<managed-bean-name>listBean</managed-bean-name>
		<managed-bean-class>org.monday.app.web.action.ListAction</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
		<!-- 注入Service -->
		<managed-property>
			<property-name>userService</property-name>
			<value>#{userService}</value>
		</managed-property>
	</managed-bean>

	<!-- 配置导航规则 -->
</faces-config>

 

 

 使用的是setter的设值注入。

 

 这样就将Service组件注入到托管Bean中了。

 

终于其他的...可以参考附件

 


===============================注意===============================

JpaDaoSupport在Spring3.1中过时

 

@deprecated as of Spring 3.1, in favor of native EntityManager usage
(typically obtained through <code>@PersistenceContext</code>)

 

JpaTemplate在Spring3.1中过时

@deprecated as of Spring 3.1, in favor of native EntityManager usage
(typically obtained through <code>@PersistenceContext</code>)
Note that this class did not get upgraded to JPA 2.0 and never will.

 

两者都推荐使用
@PersistenceContext(unitName = "jpa")
private EntityManager entityManager;

 

但是Hibenrate3.X的却没有过时,而Spring整合Hibenate4.X的时候,却没有了HibernateDaoSupport和HibernateTemplate的支持,却推荐使用SessionFactory,即使用Hibenate原生的API。


呵呵,编辑器真的好了。。。

 

 

 

 

 

 

  • jjs.zip (17.5 KB)
  • 下载次数: 50
分享到:
评论
1 楼 wlxwlx 2014-12-31  
你好,可以上传一下jar包吗?

相关推荐

    spring-3.0.5.jar

    首先,Spring 3.0.5是Spring框架的一个关键更新,它引入了对Java EE 6的支持,包括对JSF 2.0、JPA 2.0和EJB 3.1的全面集成,这使得在企业级应用开发中,Spring能够更好地与这些标准技术协同工作,提高开发效率。...

    spring-framework-3.0.5.RELEASE-dependencies.zip

    在这个版本中,Spring对Java EE 6的支持更加完善,包括对JSF 2.0、JPA 2.0和EJB 3.1的集成。此外,3.0.x系列还引入了Groovy支持,使得开发者可以使用Groovy语言编写Spring配置,增强了代码的可读性和简洁性。 ...

    Spring 3.0

    首先,Spring 3.0引入了对Java EE 6的支持,包括对JSF 2.0、JPA 2.0和EJB 3.1等规范的全面支持。这使得Spring框架可以更好地与现代企业级Java环境集成,提供了一个统一的编程模型,降低了开发者的学习曲线。 其次,...

    spring-framework-3.1.2.RELEASE jar包

    Spring框架是Java开发中不可或缺的一部分,它为构建企业级应用提供了全面的解决方案。Spring 3.1.2.RELEASE是该框架的一个重要版本,虽然它已经相对较老,但仍然在某些项目中被广泛使用,尤其是那些无法立即升级到...

    Spring 3.x 权威指南:实施Java EE 6 的利器

    在Java EE 6的集成方面,Spring框架支持EJB 3.1、JPA 2.0、JSF 2.0等标准,提供了与这些技术的无缝集成方案。读者可以学习到如何在Spring中使用EJB进行服务层组件的开发,如何利用JPA进行持久化操作,以及如何配合...

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

    6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份 7.2.1 配置Provider Manager 7.2.2 根据数据库验证身份 7.2.3 根据LDAP仓库...

    SpringMVCHibernateProject:Spring MVC + Hibernate 初学者教程

    SpringMVCHibernate项目Spring MVC + Hibernate 初学者教程技术SpringMVC HibernateJSP 页面应用服务器:Glassfish 数据库:MySQL 内容:共4... 比较 (Spring MVC + Hibernate + JSP) 和 (JavaEE with EJB + JPA + JSF)

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

    6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份 7.2.1 配置Provider Manager 7.2.2 根据数据库验证身份 7.2.3 根据LDAP仓库...

    Spring in Action(第2版)中文版

    6.4.3在spring2.0里声明事务 6.4.4定义注释驱动事务 6.5小结 第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置providermanager 7.2.2根据数据库验证身份 7.2.3根据ldap仓库进行身份验证 ...

    spring framework中英文对照文档

    Spring Framework 是一个全面的Java应用开发框架,由Pivotal Software公司开发并维护。它以其模块化、松耦合的设计理念,以及对依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, ...

    Spring in action 3.0

    5. **Spring与Java EE 6的集成**:Spring 3.0引入了对Java EE 6规范的支持,包括CDI(Contexts and Dependency Injection)、EJB 3.1、JSF 2.0等,使得Spring应用可以更好地融入到Java EE环境中。 6. **RESTful Web...

    myeclipse10.7中的jar包

    2. **Spring 3.1 Persistence Libraries**:这部分是Spring的持久层库,包含Spring Data Access模块,支持ORM(对象关系映射)框架如Hibernate,JPA(Java Persistence API),以及对JDBC的高级封装,简化数据访问...

    j2ee6官方文档 中英文档

    J2EE 6包含了一系列组件和服务,如Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JPA(Java Persistence API)、JSF(JavaServer Faces)等,它们共同构成了企业级应用开发的基石。...

    spring-framework-3.1.3.RELEASE.zip

    1. **Web应用开发**:利用Spring MVC可以快速构建高效、可测试的Web应用,支持模板引擎如FreeMarker、Thymeleaf,以及与JSF、Struts等其他Web框架的集成。 2. **数据访问**:Spring Data JPA、Spring Data MongoDB...

    Spring API

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    spring reference2.5

    - **JSF 1.2支持**:增加了对JavaServer Faces (JSF) 1.2的支持。 - **JAX-WS支持**:加入了对JAX-WS的支持,用于开发WebService应用。 **2.6 其他方面** - **动态语言支持**:Spring 2.5增加了对Groovy等动态语言...

    Spring中文帮助文档

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    跟我学spring

    在学习Spring的过程中,读者会从基础到高级,逐步掌握Spring框架的各个方面,最终能够熟练地应用Spring进行企业级应用的开发。这份教程的目标是引导读者从理论到实践,逐步深入理解和应用Spring框架的强大功能。

Global site tag (gtag.js) - Google Analytics