jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟服务器关机怎么开,云服务器关机了怎么开启

云服务器关机了怎么开启 内容精选换一换开启防护后&#xff0c;您可以根据需要进行安全配置。包括配置常用登录地、常用登录IP、SSH登录IP白名单&#xff0c;开启恶意程序自动隔离查杀功能。配置常用登录地后&#xff0c;企业主机安全服务将对非常用地登录主机的行为进行告警。…

web文件怎么传到服务器,web文件传到服务器

web文件传到服务器 内容精选换一换工具中所有涉及上传文件功能的&#xff0c;如果需要上传的文件大于1GB或者解压后超过剩余磁盘空间的一半&#xff0c;则需要释放磁盘空间或手动将文件上传至服务器&#xff0c;其他情况可通过Web界面上传功能上传。Web服务端证书&#xff0c;即…

(转)iOS面试题目

1、Object-C有多继承吗&#xff1f;没有的话用什么代替&#xff1f;cocoa 中所有的类都是NSObject 的子类 多继承在这里是用protocol 委托代理 来实现的 你不用去考虑繁琐的多继承 ,虚基类的概念. ood的多态特性 在 obj-c 中通过委托来实现. 2、Object-C有私有方法吗&#xff1…

Queue Explorer过期处理

Queue Explorer是收费软件,用一段时间后会显示过期界面无法使用&#xff0c; 我们可以删除注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cogin\QueueExplorerPRO 下的项 然后继续使用该软件转载于:https://www.cnblogs.com/event/p/3935425.html

weblogic ejb_使用Oracle WebLogic对应用程序外部的EJB的引用

weblogic ejb在之前的文章中&#xff0c;我们对EJB 3.0版及其为您提供的构建Java EE应用程序的可移植机制进行了概述。 由于Java EE规范都是关于可移植性的&#xff0c;因此冒着重复自我的风险&#xff0c;我们经常强调EJB v。3.0规范上仍然存在最重要的可移植性限制&#xff1…

Android Studio显示行数

Android Studio在打开的文件左側单击鼠标右键&#xff0c;也能像Eclipse一样设置显示代码行数&#xff0c;如图1。可是这边跟Eclipse有一个非常大的差别&#xff0c;Eclipse设置后&#xff0c;其余的相应文件也跟着生效&#xff0c;即使文件关闭后又一次打开行数也还是会显示&a…

Java集合---HashSet的源码分析

一、 HashSet概述&#xff1a; HashSet实现Set接口&#xff0c;由哈希表&#xff08;实际上是一个HashMap实例&#xff09;支持。它不保证set 的迭代顺序&#xff1b;特别是它不保证该顺序恒久不变。此类允许使用null元素。 二、 HashSet的实现&#xff1a; 对于HashSet而言&…

lambda语法_Java Lambda语法替代

lambda语法关于lambda-dev邮件列表的讨论已经开始解决lambdas /函数文字的Java语言语法应该是什么样的问题。 让我们看一个稍微平凡的例子&#xff0c;然后尝试弄清楚问题。 Perl的人有一个很好的例子&#xff0c;说明以某种功能性的方式使用函数引用–他们称其为Schwartzian变…

CSDN论坛上的一道算法题

源地址为&#xff1a;http://bbs.csdn.net/topics/390854089 昨天晚上在CSDN论坛上看到这道题&#xff0c;思索一番后想到一个解决方案&#xff0c;也简单实现了。今天早上把博客补一补。算是做个笔记吧。 题目&#xff1a; 有m个人面向南方站成一排(m ≥1)&#xff0c;每喊一次…

Eclipse程序员要掌握的常用快捷键

判断一个人的编程水平&#xff0c;就看他用键盘多&#xff0c;还是鼠标多。用键盘一是为了输入代码&#xff08;当然了&#xff0c;也包括注释&#xff09;&#xff0c;再有就是熟练使用快捷键。曾有人在豆瓣评《卓有成效的程序员》&#xff1a;“人有多大懒&#xff0c;才有多…

spring依赖注入_Spring依赖注入技术的发展

spring依赖注入回顾Spring框架的历史&#xff0c;您会发现在每个发行版中实现依赖注入的方法越来越多。 如果您使用该框架已经超过一个月&#xff0c;那么在这篇回顾性文章中可能不会发现任何有趣的东西。 除了Scala中的最后一个示例&#xff0c;没有其他东西希望如此。 首先是…

java 获取oracle mysql sqlserver 链接 connection

import java.sql.Connection; import java.sql.DriverManager; //获取sqlserver connection public static Connection getSQLServerConn(){ Connection dbConn null; String driverName "com.microsoft.sqlserver.jdbc.SQLServerDriver"; …

TortoiseSVN菜单项功能说明

原帖地址&#xff1a;http://blog.csdn.net/windone0109/article/details/4030274 TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具。通过使用它&#xff0c;我们可以可视化的管理我们的版本库。不过由于它只是一个客户端&#xff0c;所以它不能对版本库进行权限管理。…

hornetq_Spring 3 HornetQ 2.1集成教程

hornetq通过Spring框架使用JBoss的新超高性能消息传递系统。 HornetQ是一个开放源代码项目&#xff0c;用于构建多协议&#xff0c;可嵌入&#xff0c;非常高性能的集群异步消息传递系统。 它是用Java编写的&#xff0c;并且可以在具有Java 5或更高版本运行时的任何平台上运行…

zoj 3811 untrusted patrol

昨天网赛的C题&#xff0c;我负责的&#xff0c;题意有些模模糊糊的 我首先弄清楚了题意&#xff0c;即要求一个patrol是否可能巡视过所有的点&#xff0c;首先整个图要是连通的&#xff0c;这个在建图的时候边用下并查集即可&#xff0c;然后某些点装了传感器&#xff0c;传感…

上周热点回顾(9.1-9.7)

热点随笔&#xff1a; 魅族的“火爆”预定表示“呵呵呵”-不要怪我拆穿&#xff08;tankaixiong&#xff09; 【调侃】IOC前世今生&#xff08;家住腊树下&#xff09; 跟着8张思维导图学习javascript&#xff08;Ico_Coco&#xff09; 下一代Asp.net开发规范OWIN&#xff08;…

mockito手动注入依赖_依赖注入–手动方式

mockito手动注入依赖依赖注入是一种将行为与依赖解决方案分开的技术。 用简单的话来说&#xff0c;它使开发人员可以定义具有特定功能的类&#xff0c;这些功能取决于各种协作者&#xff0c;而不必定义如何获取对这些协作者的引用。 以此方式&#xff0c;实现了各个组件之间的解…

ubuntu使用root权限登录的设置方法

Ubuntu系统默认是不允许用户以root身份登录的&#xff0c;在网上找到的方法如下&#xff1a; 1、首先设置root密码&#xff0c;利用现有管理员帐户登陆Ubuntu&#xff0c;在终端执行命令&#xff1a;sudo passwd root&#xff0c;接着输入密码和root密码&#xff0c;重复密码。…

visio 小技巧

Visio作图非常的方便 目前我还是用Visio2003&#xff0c;有一些小技巧&#xff0c;记录一下。 1、visio修改文本框文字对齐方式。默认的对齐方式是上下、左右居中。修改的位置: 在一个文档中可以插入多个标签页&#xff0c;当需要分页&#xff0c;用不同页归类不同信息的时候使…

java实现bean实体与map集合相互转换

方法一 //bean装换成map public static Map<?, ?> objectToMap2(Object obj) { if(obj null) return null; return new org.apache.commons.beanutils.BeanMap(obj); } 方法二 //bean装换成map public static Map&l…