jboss4.2.3

在花费大量时间在网上搜索之后,尝试找到对几个项目使用Spring,JPA和Hibenate的最有效方法,我们得出了将在下面介绍的配置的结论。 将Spring与JPA和Hibernate集成包括几个步骤:

  • Spring容器的配置
  • JPA ORM层的配置
  • Hibernate Second lvl缓存的配置(如果需要)

请记住,就数据源而言,我们假设我们在J2EE容器中进行操作,因此我们将要从JNDI查找现有数据源并使用它。 我们将要配置的文件如下所述:

  1. spring.xml文件,用于驱动spring容器。
  2. 驱动JPA ORM层的persistence.xml文件
  3. 第二个lvl缓存文件,例如JBoss TreeCache提供程序的treecache.xml (如果需要)

下面是一个示例spring.xml文件:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
><context:component-scan base-package="com.mycomp.mypackage" /><task:annotation-driven executor="myExecutor" scheduler="myScheduler" /><task:executor id="myExecutor" pool-size="5" /><task:scheduler id="myScheduler" pool-size="10" /><tx:annotation-driven /><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="persistenceUnitName" value="MyPersistenceUnit" /></bean><bean id="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager"><property name="transactionManagerName" value="java:/TransactionManager" /><property name="userTransactionName" value="UserTransaction" /></bean></beans>

这里需要注意的几件事

  • 将context:component-scan标记的base-package属性更改为项目的基本包,以便扫描Spring组件(服务,DAO等)
  • 根据persistence.xml文件中的指示,将entityManagerFactory bean的persistentUnitName属性的value属性更改为您的持久单元的名称

下面显示了一个示例persistence.xml文件:

<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="MyPersistenceUnit" transaction-type="JTA"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/MyDataSource</jta-data-source><properties><property name="hibernate.dialect"  value="org.hibernate.dialect.HSQLDialect"/><property name="hibernate.hbm2ddl.auto" value="update"/><property name="hibernate.show_sql" value="false"/><property name="hibernate.transaction.manager_lookup_class"  value="org.hibernate.transaction.JBossTransactionManagerLookup"/><!-- Uncomment below to use Hibernate second lvl cache --><!--<property name="hibernate.cache.provider_class" value="org.hibernate.cache.TreeCacheProvider"/><property name="hibernate.treecache.mbean.object_name" value="jboss.cache:service=TreeCache"/><property name="hibernate.cache.use_second_level_cache" value="true"/><property name="hibernate.cache.use_query_cache" value="true"/><property name="hibernate.cache.use_structured_entries" value="true"/>--></properties></persistence-unit></persistence>

这里需要注意的几件事:

  • 持久性单元名称(此处为MyPersistenceUnit)必须与spring.xml文件中的值匹配
  • 事务类型可以具有JTA或LOCAL值,我们的假设是我们正在启用JTA的容器中进行部署,因此我们可以利用全局事务(JTA),在任何其他情况下,都应使用LOCAL值
  • 如上所述,我们假设我们正在J2EE容器中进行部署,并且数据源在单独的文件中声明并且位于JNDI中,因此我们指示JPA使用在特定JNDI名称下找到的数据源,您应该根据您的数据源JNDI名称
  • 我们要求Hibernate状态使用Hypersonic方言,您应该根据数据源更改此值,例如,对于MySQL,此值应为org.hibernate.dialect.MySQLDialect(对于myISAM引擎)或org.hibernate.dialect.MySQLInnoDBDialect(对于InnoDB引擎)
  • 我们要求Hibernate状态查找我们的JTA事务管理器,例如,如果我们在JBoss内部部署,则使用指定的值,您应该根据您的环境更改此值
  • 如果要启用Hibernate第二个lvl缓存,只需取消注释指定的配置指令

下面显示了一个示例第二个lvl缓存(JBoss树缓存– treecache.xml)文件:

<server><classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar" /><mbean code="org.jboss.cache.TreeCache" name="jboss.cache:service=TreeCache"><depends>jboss:service=Naming</depends><depends>jboss:service=TransactionManager</depends><attribute name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute><attribute name="IsolationLevel">REPEATABLE_READ</attribute><attribute name="CacheMode">LOCAL</attribute><attribute name="UseReplQueue">false</attribute><attribute name="ReplQueueInterval">0</attribute><attribute name="ReplQueueMaxElements">0</attribute><attribute name="ClusterName">TreeCache-Cluster</attribute><attribute name="ClusterConfig"><config><UDP mcast_addr="228.1.2.3" mcast_port="48866" ip_ttl="64"ip_mcast="true" mcast_send_buf_size="150000" mcast_recv_buf_size="80000"ucast_send_buf_size="150000" ucast_recv_buf_size="80000" loopback="false" /><PING timeout="2000" num_initial_members="3" up_thread="false"down_thread="false" /><MERGE2 min_interval="10000" max_interval="20000" /><FD_SOCK /><VERIFY_SUSPECT timeout="1500" up_thread="false"down_thread="false" /><pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"max_xmit_size="8192" up_thread="false" down_thread="false" /><UNICAST timeout="600,1200,2400" window_size="100"min_threshold="10" down_thread="false" /><pbcast.STABLE desired_avg_gossip="20000" up_thread="false"down_thread="false" /><FRAG frag_size="8192" down_thread="false" up_thread="false" /><pbcast.GMS join_timeout="5000" join_retry_timeout="2000"shun="true" print_local_addr="true" /><pbcast.STATE_TRANSFER up_thread="true"down_thread="true" /></config></attribute><attribute name="FetchInMemoryState">true</attribute><attribute name="InitialStateRetrievalTimeout">20000</attribute><attribute name="SyncReplTimeout">20000</attribute><attribute name="LockAcquisitionTimeout">15000</attribute><attribute name="EvictionPolicyClass"></attribute><attribute name="UseMarshalling">false</attribute></mbean></server>

这里需要注意的几件事

  • 更新类加载器的路径,以找到两个必需的文件(jboss-cache.jar,jgroups.jar),JBoss树缓存才能正常工作
  • 该文件将树缓存配置为JBoss MBean服务,因此必须将其部署在JBoss应用服务器中,其他配置类型不在本教程的讨论范围之内,因此将不作进一步讨论。 有关在其他环境中配置JBoss树缓存的信息,请参考相应的文档。

就是这样,现在让我基于上述配置介绍一个示例DTO和DAO:

首先是DTO类(EmployeeDTO)

package com.mycomp.myproject.dto;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "EMPLOYEE")
public class EmployeeDTO implements java.io.Serializable {private static final long serialVersionUID = 7440297955003302414L;@Id@Column(name="employee_id")private long employeeId;@Column(name="employee_name", nullable = false, length=30)private String employeeName;@Column(name="employee_surname", nullable = false, length=30)private String employeeSurname;@Column(name="job", length=50)private String job;public EmployeeDTO() {}public EmployeeDTO(int employeeId) {this.employeeId = employeeId;        }public EmployeeDTO(long employeeId, String employeeName, String employeeSurname,String job) {this.employeeId = employeeId;this.employeeName = employeeName;this.employeeSurname = employeeSurname;this.job = job;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getEmployeeSurname() {return employeeSurname;}public void setEmployeeSurname(String employeeSurname) {this.employeeSurname = employeeSurname;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}}

以下是用于访问Employee数据(EmployeeDTO)的DAO类

package com.mycomp.myproject.dao;import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;import com.mycomp.myproject.dto.EmployeeDTO;@Repository("employeeDAO")
public class EmployeeDAO extends JpaDAO<Long, EmployeeDTO> {@AutowiredEntityManagerFactory entityManagerFactory;@PostConstructpublic void init() {super.setEntityManagerFactory(entityManagerFactory);}}

如您所见,EmployeeDAO类扩展了基本的DAO类(JpaDao)。 EmployeeDAO类可以包含有关EmployeeDTO对象的特定查询,但是所有CRUD操作都可以从下面提供的基本DAO类(JpaDao)中进行处理:

package com.mycomp.myproject.dao; import java.lang.reflect.ParameterizedType;
import java.util.List; import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query; import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.support.JpaDaoSupport; public abstract class JpaDAO<K, E> extends JpaDaoSupport { protected Class<E> entityClass; @SuppressWarnings("unchecked") public JpaDAO() { ParameterizedType genericSuperclass = (ParameterizedType) getClass() .getGenericSuperclass(); this.entityClass = (Class<E>) genericSuperclass .getActualTypeArguments()[1]; } public void persist(E entity) { getJpaTemplate().persist(entity); } public void remove(E entity) { getJpaTemplate().remove(entity); } public E merge(E entity) { return getJpaTemplate().merge(entity); } public void refresh(E entity) { getJpaTemplate().refresh(entity); } public E findById(K id) { return getJpaTemplate().find(entityClass, id); } public E flush(E entity) { getJpaTemplate().flush(); return entity; } @SuppressWarnings("unchecked") public List<E> findAll() { Object res = getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query q = em.createQuery("SELECT h FROM " + entityClass.getName() + " h"); return q.getResultList(); } }); return (List<E>) res; } @SuppressWarnings("unchecked") public Integer removeAll() { return (Integer) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query q = em.createQuery("DELETE FROM " + entityClass.getName() + " h"); return q.executeUpdate(); } }); }}

本教程的第二部分总结了我们将在此处讨论有关Spring服务创建的内容。

贾斯汀

翻译自: https://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html

jboss4.2.3

jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程相关推荐

  1. JBoss 4.2.x Spring 3 JPA Hibernate教程

    在花了许多时间在网上搜索之后,尝试找到对几个项目使用Spring,JPA和Hibenate的最有效方法,我们得出了将在下面介绍的配置的结论. 将Spring与JPA和Hibernate集成包括几个步骤 ...

  2. JBoss 4.2.x Spring 3 JPA Hibernate教程第2部分

    我们将继续有关Spring 3 , Hibernate , JPA和JBoss 4.2.x – 4.3集成的教程 . 最后一步是创建一个Spring服务,以向最终用户公开功能. 我们必须创建一个接口类 ...

  3. Spring MVC开发–快速教程

    这是我们的JCG合作伙伴之一,来自Manoj的有关使用Spring开发Web应用程序的简短教程, 网址为" The Khangaonkar Report ". (注意:对原始帖子进 ...

  4. gwt-2.8.2下载_GWT 2 Spring 3 JPA 2 Hibernate 3.5教程

    gwt-2.8.2下载 本分步指南将介绍如何使用以下方法开发简单的Web应用程序 Google的网络工具包 (GWT)用于富客户端,而Spring作为后端服务器端框架. 该示例Web应用程序将提供对数 ...

  5. GWT 2 Spring 3 JPA 2 Hibernate 3.5教程

    本分步指南将介绍如何使用开发一个简单的Web应用程序 Google的网络工具包 (GWT)用于富客户端,而Spring作为后端服务器端框架. 该示例Web应用程序将提供对数据库执行CRUD(创建检索更 ...

  6. 芋道 Spring Boot JPA 入门(一)之快速入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  7. 使用H2Database+Druid连接池+Spring Data JPA+Ehcache实现CRUD操作

    前言 注:本篇为纯实践篇,主要用于技术整合,介绍如何搭建一个完整全面的Web项目.如果对于技术原理还不了解的童鞋可点击下方链接,学习后在来~ H2数据库教程:H2数据库入门 缓存使用教程:在Sprin ...

  8. Spring Data JPA是什么?以及简单的使用(联表查询)

    Spring Data学习网站(下载gitHub工程学习) Spring Boot JPA 使用教程 - fishpro - 博客园 Spring Data JPA是什么?以及相关概述 首先Sprin ...

  9. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

最新文章

  1. C++ 单例模式析构函数的运用,析构函数的线程安全
  2. lol服务器维护9月30,英雄联盟4月30日更新维护几点结束_4月30日LOL10.9版本停机维护结束时间_3DM网游...
  3. 推荐经典算法实现之BPMF(python+MovieLen)
  4. Cloud Native未来值得关注的方向:Service Mesh简介
  5. 3.1 《数据库系统概论》SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)
  6. 企业实战(Jenkins+GitLab+SonarQube)_07_Jenkins 安全设置
  7. codeforces C. Design Tutorial: Make It Nondeterministic
  8. MACAPP中引入ffmpeg库完成具体功能
  9. python猴子吃桃子的问题_非人哉:明星带货却生意惨淡,猴哥心太大,这一帮猴子猴孙不省心...
  10. java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据
  11. 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
  12. Jmeter高阶学习,运用NotePad++编写工程,随意复制多个工程到同一个工程
  13. 如何自动生成SpringBoot项目代码
  14. 小米路由pro php,小米路由器开启frp
  15. java操作word的方法(总结)
  16. 你需要知道的关于元宇宙NFT平台艺术数字藏品交易的一切
  17. unity使用tiled文件,将数据用unity打开,可以无限tiled地图
  18. java资产管理系统开源_Java固定资产管理系统源代码
  19. html中怎么写虚线框的宽高,html如何设置虚线边框
  20. js: 获取最近3天、1周、1个月、3个月、半年、1年的时间

热门文章

  1. java实现遍历树形菜单方法——数据库表的创建
  2. 利用redis保存验证码并设置过期时间
  3. 第12步 用户模块前端(客户)
  4. php中时间轴,PHP时间轴函数
  5. tsc244标签编辑软件_能打小票的标签机,M110智能标签打印机来了!
  6. 中海达手部链接电脑安装软件_山东水文局:较大含沙量条件下中海达ADCP外接测深仪测流系统试验成功...
  7. compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序
  8. openj9下载_Quarkus on OpenJ9 JVM和资源消耗
  9. zing jvm_Zing加快了JVM应用程序的预热
  10. javafx 调用java_Java,JavaFX的流畅设计风格拨动开关