zoukankan      html  css  js  c++  java
  • struts1.x+spring2.5+JPA(hibernate)整合

    1.在web.xml中加入如下配置

            <!-- 配置Struts ActionServlet -->
    	<servlet>
    		<servlet-name>ActionServlet</servlet-name>
    		<servlet-class>
    			org.apache.struts.action.ActionServlet
    		</servlet-class>
    		<init-param>
    			<param-name>config</param-name>
    			<param-value>
    				/WEB-INF/classes/struts-config.xml
    			</param-value>
    		</init-param>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>ActionServlet</servlet-name>
    		<url-pattern>*.do</url-pattern>
    	</servlet-mapping>
    
    	<!-- Spring配置 指定spring配置文件位置-->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:ApplicationContext.xml</param-value>
    	</context-param>
    
    
    	<!-- 配置OpenEntityManagerInview -->
    	<filter>
    		<filter-name>openEntityManagerInView</filter-name>
    		<filter-class>
    			org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    		</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>openEntityManagerInView</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<!-- 实例化Spring容器 -->
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>

    2.Spring的配置文件ApplicationContext.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:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
    
    	<!-- 启用支持Annotation注解方式的Bean管理 -->
    	<context:component-scan base-package="com.kay"></context:component-scan>
    
    	<!-- 启用支持Annotation注解方式的事务管理 -->
    	<tx:annotation-driven transaction-manager="transactionManager" />
    	<!-- JPA事务管理器 -->
    	<bean id="transactionManager"
    		class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory"
    			ref="entityManagerFactory">
    		</property>
    	</bean>
    	
    	
    	<!-- C3P0数据源配置 -->
    	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    		<property name="driverClass" value="com.mysql.jdbc.Driver"/>
    		<property name="jdbcUrl" value="jdbc:mysql:///jpa"/>
    		<property name="maxIdleTime" value="30"/>
    		<property name="properties">
    			<props>
    				<prop key="user">root</prop>
    				<prop key="password">root</prop>
    				<prop key="c3p0.acquire_increment">2</prop>
    				<prop key="c3p0.max_size">20</prop>
    				<prop key="c3p0.min_size">1</prop>
    			</props>
    		</property>
    	</bean>
    	
    	<!-- 声明EntityManagerFactory -->
    	<bean id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="dataSource" ref="dataSource"></property>
    		<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"></property>
    		<property name="loadTimeWeaver">
    			<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> 
    		</property>
    	</bean>
    </beans>

    3.struts-config.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
              "http://struts.apache.org/dtds/struts-config_1_3.dtd">
    <struts-config>
    	
    	<form-beans></form-beans>
    	<action-mappings>
    		<action path="/user" parameter="method">
    		</action>
    	</action-mappings>
    	<!-- 将Action交由Spring去管理 -->
    	<controller		processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
    </struts-config>

    4.jpa配置文件persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence 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" version="1.0">
        
    	<persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
      		<properties>
    			<property name="hibernate.show_sql" value="true"/>
    	  	</properties>
    	</persistence-unit>
    </persistence>

    注意在DAO中获取EntityManager的方式:

    package com.kay.dao;
    
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import org.springframework.stereotype.Repository;
    import com.kay.pojo.User;
    
    @Repository
    public class UserDAO{
    
    	@PersistenceContext
    	private EntityManager manager;
    	
    	public EntityManager getManager()
    	{
    		return manager;
    	}
    	public User findById(int id)
    	{
    		return getManager().find(User.class, id);
    	}
    	public void add(User user)
    	{
    		getManager().persist(user);
    		getManager().flush();
    	}
    }

    在Service中加入事务支持:

    package com.kay.service;
    
    import javax.annotation.Resource;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import com.kay.dao.UserDAO;
    import com.kay.pojo.User;
    
    @Service
    @Transactional
    public class UserService {
    
    	@Resource
    	private UserDAO userDAO;
    	
    	public void add(User user)
    	{
    		userDAO.add(user);
    	}
    	public User findById(int id)
    	{
    		return userDAO.findById(id);
    	}
    
    }
    运行的容器为tomcat,并没有使用JBOSS等EJB容器,如果在DAO获取EntityManager或EntityManagerFactory的方式使用@Resource方式,
    则会抛出javax.persistence.TransactionRequiredException: no transaction is in progress异常,所以各位必须注意EntityManager的获取方式。
     
     
  • 相关阅读:
    LeetCode 2 -- Add Two Numbers
    LeetCode 1 -- Two Sum
    LeetCode189——Rotate Array
    Win10下IIS配置 C#项目的部署与发布
    Linux查看进程和删除进程
    使用 Visual Studio 将 ASP.NET Core 应用发布到 Linux 上的应用服务
    Spring Boot 设置启动时路径和端口号
    Linux平台部署.net Core SDK
    C#教程之如何在centos操作系统上发布.net core的项目
    Linux如何查看和控制进程
  • 原文地址:https://www.cnblogs.com/kay/p/1504240.html
Copyright © 2011-2022 走看看