• 1. Enterprise Java Bean 3.0(EJB3.0)企业级Java Bean开发
  • 2. 课程大纲1、JavaEE技术体系 2、EJB3.0技术简介 3、Enterprise Bean(企业Bean)理论及实例开发 Session Bean MDB 4、Persistence(JPA - 数据持久化框架) Entity Bean EntityManager EJB-QL(EJB查询语言) OR映射 5、EJB事务处理(Transactions)及其与Spring容器事务的比较
  • 3. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 4. Java EE技术体系 – 版本发布的历史J2EE 1.2 (December 12, 1999) J2EE 1.3 (September 24, 2001) J2EE 1.4 (November 11, 2003) Java EE 5 (May 11, 2006)
  • 5. J2EE 1.2 (December 12, 1999)Enterprise JavaBeans Specification (EJB), Version 1.1 JavaServer Pages Specification (JSP), Version 1.1 Java Servlet Specification, Version 2.2 JDBC API, Version 2.0 Java Naming and Directory Interface Specification (JNDI), Version 1.2 Java Message Service (JMS), Version 1.0.2 Java Transaction API (JTA), Version 1.0.1 Java Transaction Service (JTS), Version 0.95 JavaMail API Specification Version 1.1 JavaBeans Activation Framework Specification (JAF), Version 1.0
  • 6. J2EE 1.3 (September 24, 2001)Enterprise JavaBeans Specification (EJB), Version 2.0 JavaServer Pages Specification (JSP), Version 1.2 Java Servlet Specification, Version 2.3 JDBC API, Version 2.1 Java Naming and Directory Interface Specification (JNDI), Version 1.2 Java Message Service (JMS), Version 1.0.2 Java Transaction API (JTA), Version 1.0.1 Java Transaction Service (JTS), Version 1.0 JavaMail API Specification Version 1.1 JavaBeans Activation Framework Specification (JAF), Version 1.0 J2EE Connector Architecture, Version 1.0 Java API for XML Processing (JAXP), Version 1.0 Java Authentication and Authorization Service (JAAS), Version 1.0
  • 7. J2EE 1.4 (November 11, 2003)Enterprise JavaBeans Specification (EJB), Version 2.1 JavaServer Pages Specification (JSP), Version 2.0 Java Servlet Specification, Version 2.4 JDBC API, Version 3.0 Java Naming and Directory Interface Specification (JNDI), Version 1.2 Java Message Service (JMS), Version 1.1 Java Transaction API (JTA), Version 1.0.1B Java Transaction Service (JTS), Version 1.0 JavaMail API Specification, Version 1.2 JavaBeans Activation Framework Specification (JAF), Version 1.0 J2EE Connector Architecture, Version 1.5 Java API for XML Processing (JAXP), Version 1.2 Java Authentication and Authorization Service (JAAS), Version 1.0 Java Authorization Service Provider Contract for Containers (JACC), Version 1.0 Web Services for J2EE, Version 1.0 Java API for XML-based RPC (JAX-RPC), Version 1.0 Java API for XML Registries (JAXR), Version 1.0 Java Management Extensions (JMX), Version 1.1 Java 2 Platform, Enterprise Edition Management Specification, Version 1.0 Java 2 Platform, Enterprise Edition Deployment Specification, Version 1.0
  • 8. Java EE 5 (May 11, 2006)Enterprise JavaBeans Specification (EJB), Version 3.0 Java Persistence API (JPA), Version 1.0 JavaServer Pages Specification (JSP), Version 2.1 Java Servlet Specification, Version 2.5 JavaServer Faces (JSF), Version 1.2 JavaServer Pages Standard Tag Library (JSTL), Version 1.2 JDBC API, Version 3.0 Java Naming and Directory Interface Specification (JNDI), Version 1.2 Java Message Service (JMS), Version 1.1 Java Transaction API (JTA), Version 1.1 Java Transaction Service (JTS), Version 1.0 JavaMail API Specification, Version 1.4 JavaBeans Activation Framework Specification (JAF), Version 1.1 J2EE Connector Architecture, Version 1.5 Java API for XML Processing (JAXP), Version 1.3 Java Authentication and Authorization Service (JAAS), Version 1.0 Java Authorization Service Provider Contract for Containers(JACC), Version 1.1 Web Services for Java EE, Version 1.2 Java API for XML-based RPC (JAX-RPC), Version 1.1 Java API for XML Registries (JAXR), Version 1.0 Java Management Extensions, Version 1.2 Java Platform, Enterprise Edition Management Specification, Version 1.1 Java Platform, Enterprise Edition Deployment Specification, Version 1.1 Java API for XML-based Web Services (JAX-WS), Version 2.0 Java Architecture for XML Binding (JAXB), Version 2.0 SOAP with Attachments API for Java (SAAJ), Version 1.3 Web Services Metadata for the Java Platform, Version 2.0 Streaming API for XML (StAX), Version 1.0 Java Data Objects (JDO), Version 2.0
  • 9. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 10. Java EE应用程序的组件构成(分布式多层应用架构)Java EE应用程序由组件构成Web Clients Applets Application ClientsServlet JSP JSFSession Bean MDB Entity Bean分布式? VS 集群?
  • 11. Web Clients(或称瘦客户端)一个web客户端包括两个部分: 第一,动态的web页面包含HTML/XML等标签语言,这些内容由运行在web层的web组件产生; 第二,一个web浏览器,它负责接收和解释从服务器端传送过来的web页面。
  • 12. Applets从web层传送的web页面可以包含Applet, Applet是: 用java语言编写的小应用程序 运行在被安装于web浏览器的java虚拟机中 但由于web浏览器的安全限制,Applet只能执行有限的功能。
  • 13. Application Clients(应用客户端)应用客户端一般是由swing或awt技术编写(但也有可能是命令行客户端)。应用客户端直接访问在业务逻辑层的Java Beans(EJB),当然,它也可以发出HTTP请求,访问web层组件。
  • 14. 客户端与JavaEE服务器的通信 客户端组件与运行在服务器端的业务逻辑组件通信时,既可以直接访问,也可以通过Web层的组件访问
  • 15. Web组件Web组件就是Servlet或由JSP/JSF技术创建的页面 静态HTML或Applet不是JavaEE规范的一部分。 那些辅助的工具类也不被认为是web组件。 在Web层,也可能会借助于辅助的Java Bean来处理用户的输入,并将数据传输到业务逻辑层。比如现在流行的SSH架构,就是存在于Web层的辅助工具类
  • 16. 业务逻辑组件业务逻辑组件与其它组件的交互如下所示:
  • 17. Enterprise Information System(EIS)层企业信息系统层 一般而言,指的是数据库系统。当然,也可以指企业其它的遗留系统。比如ERP等。
  • 18. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 19. SSH架构在整个Java EE架构中的位置
  • 20. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 21. JavaEE容器JavaEE容器提供了企业应用开发中的各种服务,处理事务管理、连接池等底层复杂的细节。
  • 22. 容器服务容器就是组件和底层服务细节之间的接口,在web组件、企业级Bean等能够执行之前,它必须被装配为一个JavaEE模块,并部署在容器上。 装配的过程主要包括 定制容器事务管理特性 JNDI服务等 JavaEE容器还提供其它的功能:比如管理EJB和Servlet的生命周期、数据库连接池、数据持久化等。
  • 23. 容器类型JavaEE组件经过部署之后,被安装到JavaEE容器中。 JavaEE服务器:JavaEE服务器提供web容器和EJB容器 EJB容器:管理EJB的运行 Web容器:管理Servlet和JSP的运行 (Application Client)应用客户端容器:管理客户端应用程序的运行 比如:应用客户端容器会提供JNDI服务 Applet容器:管理着Applet小应用程序的运行
  • 24. 容器类型
  • 25. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 26. Java EE应用开发与实施过程比如,Web模块: 即Web组件按如下结构进行组织,可以打包为.war文件DocumentRoot -- client-side classes and archives(applets) -- static web resources, such as images -- JSP pages -- WEB-INF -- web.xml -- Tag library descriptor files -- classes -- lib
  • 27. Java EE应用开发与实施过程在JAVA EE中,各种不同类型的模块既可以单独打包部署,也可以将这些模块综合起来做成一个EAR包进行部署。在后续课程中,我们将学习这些部署的过程。
  • 28. Java EE技术体系JavaEE版本发布的历史 分布式多层应用架构 与SSH架构的比较 Java EE容器 Java EE应用开发与实施过程 Java EE角色
  • 29. Java EE 角色JavaEE Product Provider(Java EE产品提供者) 即实现了Java EE技术规范的厂商 Application Component Provider(应用组件提供者) 企业Bean开发者 Web组件开发者 应用客户端开发者 Application Assembler(应用装配者) Deployer(部署者) System Administrator(系统管理员) Tool Provider(工具供应商) 即工具厂商,比如开发、打包、装配以及部署工具的提供
  • 30. JavaEE 5 APIs
  • 31. 课程大纲1、JavaEE技术体系 2、EJB3.0技术简介 3、Enterprise Bean(企业Bean)理论及实例开发 Session Bean MDB 4、Persistence(JPA - 数据持久化框架) Entity Class EntityManager EJB-QL(EJB查询语言) OR映射 5、EJB事务处理(Transactions)及其与Spring容器事务的比较
  • 32. EJB3.0技术简介被简化的EJB API EJB3.0消除了对Home接口的依赖,所有的持久化对象不必再实现任何EJB API接口。Session Bean,Message driven Bean,Entity Bean现在只是简单的Java Bean。 Java Annotations EJB 3.0需要用到JDK5.0中出现的新特性:Annotations。Annotation特性使得发布描述文件变成一个可选项,而非必选项。EJB 3.0 定义了很多Annotation,覆盖了众多与持久化相关的概念。比如Bean的类型、依赖注入、事务管理、安全、回调、O-R映射、关系等等。如果你想要覆盖在Annotation中的定义,那么发布描述文件依然有它的用武之地。Jboss应用服务器和Hibernate都支持这些Annotation,这就意味着,如果你使用hibernate的话,你可以在ejb3.0容器之外和在单独的Java应用程序中获得ejb3.0 annotation所带来的一切好处。 依赖注入(DI) 通过定义@Inject、@EJB、@Resource等annotations,这些依赖关系现在可以由容器来注入到EJB中。 可选的回调机制 开发者们现在可以仅仅实现他们感兴趣的那些回调方法了。通过定义@PostConstruct,@PreDestroy,@PrePersist或者@PostPersist,开发者们可以映射任何Java Bean或回调类的方法,让它们接收这些事件。 Entity Manager API 一个普通的Java Bean实例,可以通过EntityManager API来持久化到数据库,当然也可以从EntityManager中获取一个Java Bean实例,修改之后,再次持久化到数据库中。Jboss应用服务器和Hibernate都支持这个新的API。 简化的持久化模型和改良的查询 EJB 3.0将Java持久化模型进行标准化,Hibernate扮演了至关重要的角色。一套完整的Java Annotations被用来定义处理O-R映射和不同的对象关系类型。EJB 3.0也增强了EJB-QL查询语言。支持动态查询、子查询、批量更新、批量删除等。 可以脱离容器使用 EJB 3.0规范允许你在普通的Java应用程序中使用它的持久化API。
  • 33. 课程大纲1、JavaEE技术体系 2、EJB3.0技术简介 3、Enterprise Bean(企业Bean)理论及实例开发 Session Bean MDB 4、Persistence(JPA - 数据持久化框架) Entity Bean EntityManager EJB-QL(EJB查询语言) OR映射 5、EJB事务处理(Transactions)及其与Spring容器事务的比较
  • 34. Enterprise Bean(企业Bean)理论Enterprise Bean(企业Bean)理论 什么情况下需要企业Bean? 企业Bean的类型 Session Bean(会话Bean) Stateful Session Bean Stateless Session Bean MDB 定义客户端访问接口 远程客户端(Remote Client) 本地客户端(Local Client) Web service客户端 方法的参数和访问方式 独立性 粗粒度的数据访问
  • 35. 什么情况下需要企业Bean?企业Bean运行在EJB容器中。企业Bean实际上就是一个封装了业务逻辑的Java类。 Why EJB? 最重要的理由:分布式!分布式对象之间互相协作,完成特定的业务功能。分布式对象之间应实现分布透明性(或位置透明性)。即在客户端代码中无需指定分布式对象的位置(通过配置来解决)。 分布式对象之间的事务支持(RMI不支持事务) 应用程序需要支持不同的客户端,只需要少量的代码,就可以让远程客户端访问到企业Bean。 如果你的应用需要进行分布式部署、如果你的分布式对象需要支持事务、如果你的关键业务逻辑需要能够支持多种不同类型的客户端,那么EJB将会是一个很好的选择。
  • 36. EJB的基本分类Enterprise Bean – 企业Bean Session Bean – 会话Bean Stateless Session Bean – 无状态会话Bean Stateful Session Bean – 有状态会话Bean Message Driven Bean(MDB) – 消息驱动Bean,基于JMS Persistence – 持久化 Entity Bean – 实体Bean 提示:在EJB2中,Entity Bean分为BMP(Bean管理持久化实体Bean)和CMP(容器管理持久化实体Bean)两类。
  • 37. Session Bean(会话Bean)会话Bean可以执行业务逻辑操作,比如注册用户、订单登记、数据库操作等等。 什么叫会话(Session)? 即从客户端获得EJB对象开始,然后调用EJB的方法(可以多次),直到客户端生命周期结束,或客户端释放了EJB对象为止,称为一次会话 随着会话的终止,EJB对象也有可能会被EJB容器销毁 InitialContext context = new InitialContext(); FirstEjb ejb = (FirstEjb)context.lookup("FirstEjbBean/remote"); String s = ejb.saySomething("张三"); System.out.println(s);
  • 38. 什么是对象的状态?对象的状态是由其实例变量(即成员变量)的值组成的 什么是实例变量? 什么是类变量?public class SomeEjbBean implements SomeEjb { private int state; //对象的状态信息 …..
  • 39. 什么叫有状态的会话Bean?(Stateful Session Bean)即EJB能够为同一个客户端在多次请求(方法调用)之间保持状态信息。 比如:基于某种原因(可能是因为系统要支持多种不同类型的客户端),购物篮功能作为系统的核心业务,需要由EJB对象来担当(而不是由HTTP SESSION对象)。那么EJB必须能够区分不同的客户端,并分别为不同的客户端保持与其对应的状态信息。 即,从某个客户端的角度来看,似乎EJB对象正被它独占了一样,不会因为有任何其它的客户端同时对同一个EJB访问而影响其最终的计算结果。
  • 40. 从Http Session原理入手了解 Stateful Session Bean的原理比如,购物过程中,HTTP SESSION的交互过程:
  • 41. 从Http Session原理入手了解 Stateful Session Bean的原理
  • 42. 什么叫无状态的会话Bean?(Stateless Session Bean)并非是说EJB不能存在状态,而是说EJB容器不会对EJB的状态做管理 容器会使用实例池的方式,甚至单例的方式来实现无状态的Session Bean。 因为EJB容器不会对Stateless Session Bean的状态进行管理,所以它的性能要比Stateful Session Bean的好
  • 43. 回过头看看Spring?由Spring管理的业务逻辑类,是无状态的(Singleton) Struts2中的Action,是有状态的(prototype)
  • 44. 定义客户端访问接口客户端仅通过业务逻辑Bean所定义的接口来访问业务逻辑(跟具体实现无关)。 当在开发企业Bean之前,首先要做的第一个决定是:EJB要支持什么样的客户端?因为不同的客户端,其访问方式也将不同。 远程客户端 本地客户端 WebService客户端 关于JVM进程的问题: 假设在同一台机器上,安装了一个JVM,一个JBOSS应用服务器 1、启动JBOSS应用服务器(启动JBOSS当然要用到JVM) 2、另外编写一个包含main方法的JAVA类,并编译以及运行(要运行这个程序,当然也要用到JVM) 问题:在运行这个JAVA类的时刻,这台机器上有多少个JVM进程?– 客户端与其调用的EJB对象不在同一个JVM进程中– 客户端与其调用的EJB对象在同一个JVM进程中
  • 45. 远程客户端(Remote Client)一个远程客户端具有如下特性: 它可以运行在跟企业Bean不同的机器或不同的JVM进程上 它可以是web组件、应用客户端、或其它的企业Bean 对远程客户端来说,企业Bean的位置是透明的 为了创建一个能够被远程客户端访问的企业Bean,你必须用@Remote注解来定义这些企业Bean。
  • 46. 本地客户端(Local Client)一个本地客户端具有如下特性: 它必须与企业Bean运行在同一个JVM中 它可能是一个web组件或别的企业Bean 为了创建一个能够被本地访问的企业Bean,你必须用@Local注解来定义这些企业Bean。 一个企业Bean接口可以同时被定义为@Remote和@Local
  • 47. 远程访问(调用)方式(Remote Access)
  • 48. 本地访问方式(Local Access)
  • 49. 客户端与访问方式
  • 50. Web service客户端Web service客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,web service客户端才可以访问到!
  • 51. 方法的参数和访问方式不同的访问方式(Remote、Local、web service),会影响到Bean方法的参数及其返回值。 独立性 如果是远程调用,客户端操纵的Bean的参数,其实是一份参数值的拷贝。因此,对参数的修改,不会影响到Bean。但是对于本地调用来说,客户端操纵的Bean的参数,就是一个引用,它对参数的修改,将会影响到Bean。所以,不管在哪种情况下,请避免修改参数的值! 粗粒度的数据访问 因为远程调用的速度比较慢,所以在设计的时候,请尽量使用粗粒度的接口设计。即尽量减少方法的调用,并尽可能在一次方法调用中传输完毕所需要的数据!
  • 52. Enterprise Bean实例开发Enterprise Bean实例开发
  • 53. 安装及运行JBOSS从网站下载JBOSS的安装包: jems-installer-1.2.0.GA.jar 在命令行下运行这个安装包 java –jar jems-installer-1.2.0.GA.jar
  • 54. (本页无文本内容)
  • 55. (本页无文本内容)
  • 56. (本页无文本内容)
  • 57. (本页无文本内容)
  • 58. 在本步骤中,要注意选中ejb3
  • 59. (本页无文本内容)
  • 60. (本页无文本内容)
  • 61. (本页无文本内容)
  • 62. 运行JBOSS安装完成之后: 进入JBOSS安装目录下的bin目录,运行其中的run即可 或者也可以在MyEclipse中集成对JBOSS的支持
  • 63. 在MyEclipse中添加对JBOSS运行的支持这将有利于部署EJB项目
  • 64. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)选择新建EJB Project
  • 65. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)2、选中J2EE Specification Level中的Java EE 5.0 – EJB3,并取消“Add support for Entity Beans选项”
  • 66. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)3、编写EJB代码
  • 67. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)4、利用注解配置EJB至此,第一个EJB已经开发完成,下面部署到JBOSS
  • 68. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)5、部署到JBOSS 并启动JBOSS
  • 69. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)6、开发应用客户端 新建一个java项目
  • 70. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)7、将EJB项目的接口打包(客户端只需要EJB的接口即可),并把这个jar包加入到客户端项目的类路径中 8、将JBOSS安装目录下的client目录里面的所有jar包加到客户端项目中 9、编写客户端代码:
  • 71. 开发第一个EJB应用(基于MyEclipse6.0.0.M1)10、在客户端源代码目录下添加jndi.properties文件,内容是: 11、运行客户端即可java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost
  • 72. 动手开发更多的EJB实例项目有状态和无状态EJB之间的差异比较 远程客户端和本地客户端(@Remote与@Local)之间的差异 EJB实现多个接口的情况下,如何定义访问方式?(注解的基本概念) JMS的基本概念以及MDB消息驱动Bean 如何把无状态的EJB定义为WebService的方法 拦截器的概念
  • 73. 课程大纲1、JavaEE技术体系 2、EJB3.0技术简介 3、Enterprise Bean(企业Bean)理论及实例开发 Session Bean MDB 4、Persistence(JPA - 数据持久化框架) Entity Bean EntityManager EJB-QL(EJB查询语言) OR映射 5、EJB事务处理(Transactions)及其与Spring容器事务的比较
  • 74. Persistence(JPA - 数据持久化框架)持久化框架 开发持久化Bean Persistence.xml 配置JBOSS数据源 编写实体类 编写业务逻辑类 持久化实体管理器EntityManager EJB-QL OR映射
  • 75. 开发持久化Bean持久化Bean跟普通Java Bean无异,区别在于它们用ejb的Annotation进行了标记。 持久化Bean有下列基本要求: 一个实体类(即普通的POJO),并将其标识为@Entity 实体类必须要有主键,一般用@Id将其标识 在/META-INF/目录下,有persistence.xml文件,其主要作用是定义实体类映射的相关配置信息,比如指定数据源、都有哪些实体类、以及跟持久化相关的其它的一些属性
  • 76. EntityBean实例开发第一步:配置JBOSS数据源拷贝数据库驱动到JBOSS_HOME/server/default/lib下 拷贝docs/examples/jca/mysql-ds.xml到/server/default/deploy目录下,并修改数据库用户名及密码 Mysql-ds.xml文件的内容类似下面所示: MySqlDS jdbc:mysql://localhost/ejb3 com.mysql.jdbc.Driver root root …….
  • 77. EntityBean实例开发第二步:创建EJB项目,支持EntityBean
  • 78. EntityBean实例开发第二步:创建EJB项目,支持EntityBeanPersistence Unit Name: 我们在后面会用这个名称来跟它所指定的数据库打交道 JNDI Data Source:输入我们刚才配置的数据源名称,并加上前缀java:/ 取消Specify JPA Datasource details的复选框
  • 79. EntityBean实例开发第二步:创建EJB项目,支持EntityBean在创建完成之后,自动在META-INF目录下添加了persistence.xml文件,其内容如下:
  • 80. EntityBean实例开发第三步:编写实体类,并注解映射规则@Entity public class Person { private int id; private String name; /** * @return Returns the id. */ @Id @GeneratedValue public int getId() { return id; } /** * @param id The id to set. */ public void setId(int id) { this.id = id; } /** * @return Returns the name. */ public String getName() { return name; } /** * @param name The name to set. */ public void setName(String name) { this.name = name; } }
  • 81. EntityBean实例开发第四步:创建实体类对应的数据库表在JBOSS应用服务器中,JPA是由Hibernate来作为底层的实现,因此,我们可以在persitence.xml中配置一些与Hibernate相关的属性,比如下面的配置: 部署EJB项目之后,即可以看到JBOSS自动导出了数据库表
  • 82. EntityBean实例开发第五步:编写业务逻辑类,操作持久化数据@Stateless @Remote public class PersonManagerBean implements PersonManager { @PersistenceContext(unitName="test") protected EntityManager em; public void addPerson(String name) { Person p = new Person(); p.setName(name); em.persist(p); } }
  • 83. EntityBean基本映射规则所有未标明为@Transient的属性均会默认映射 使用@Table和@Column注解,可将属性映射到特定的表和字段默认的表名和字段名跟属性名一致 映射的是实例变量还是getters/setters所指定的属性? field-base property-base
  • 84. 关注ID生成策略只用@Id来定义一个主键时,它的规则是:不自动生成,即由程序来手工分配 我们可以使用@GeneratedValue来指定ID的生成策略 仅使用@GeneratedVaue – ID的生成策略是自动的,也就是相当于Hibernate中native生成策略 如果ID是字符串,则可以使用UUID生成策略(使用Hibernate扩展特性)
  • 85. 多对一关联映射
  • 86. 一对一关联映射主键关联 外键关联
  • 87. 一对多关联映射一对多单向关联 一对多双向关联
  • 88. 多对多关联映射
  • 89. 继承映射总共有三种策略: 第一种是单表继承策略,如下所示
  • 90. 继承映射 – Join映射策略
  • 91. 继承映射 – TABLE_PER_CLASS映射策略
  • 92. EntityManager和PersistenceContext的管理类型Container-Managed EntityManager vs Application-Managed EntityManager 容器管理的EntityManager – 通过PersistenceContext注入EntityManager对象 应用管理的EntityManager – 通过PersistenceUnit注入EntityManagerFactory对象 Container-Managed PersistenceContext vs Application-Managed PersistenceContext 容器管理的PersistenceContext – 其生命周期由PersistenceContextType来配置 Transaction-Scoped PersistenceContext – 由容器创建,随着Transaction而传播,随着Transaction的完成而销毁 Extended-Scoped PersistenceContext – 用于Stateful Session Bean,跨越多个Transaction,随着Stateful Session Bean的销毁而销毁 应用管理的PersistenceContext
  • 93. EntityManager(持久化实体管理器)操作示例EntityManager是操作数据的接口 EntityManager提供了增删改查的操作方法 可通过@PersistenceContext(unitName=“test”)的形式对EntityManager实例变量进行注入 演示例子,操作EntityManager接口的方法!
  • 94. 实体类的生命周期及回调方法New – 即未有id值,尚未跟persistence context建立关联的对象 Managed – 有id值,已跟persistence context建立了关联 Detached – 有id值,但没有(或不再)跟persistence context建立关联 Removed – 有id值,而且跟persistence context尚有关联,但已准备好要从数据库中把它删除。
  • 95. 事务类型:事务的基本概念从事务的概念说起 原子性 – 所有操作要么都成功,要么都失败 一致性 – 事务不能违反完整性约束(比如虽然事务还未提交,但仍需遵守各种约束规则,这些规则是在事务提交之前而非在事务提交以后才生效!) 隔离性 – 一个事务的效果,不影响正在同时执行的其它事务,那么,不影响的程度如何呢? 持久性 – 一旦事务成功完成,则数据必需保证已经正确的持久化(保存)!
  • 96. 事务的基本概念:隔离性
  • 97. JDBC事务与JTA事务
  • 98. 事务类型:JTA和RESOURCE_LOCAL使用JTA来控制事务 利用容器提供的JTA事务管理器来管理事务 使用RESOURCE_LOCAL来控制事务
  • 99. 事务管理类型:CONTAINER和BEAN
  • 100. 事务的传播特性及事务管理Not Supported – 不支持,如果当前有事务上下文,将挂起当前的事务 Supports - 支持,如果有事务,将使用事务,如果没有事务,将不使用事务 Required - 需要,如果当前有事务上下文,将使用当前的上下文事务,如果没有,将创建新的事务 Required New - 需要新的事务,如果当前有事务上下文,将挂起当前的事务,并创建新的事务去执行任务,执行完成之后,再恢复原来的事务 Mandatory - 当前必须要有事务上下文,如果当前没有事务,将抛出异常 Never - 当前必须不能有事务上下文,如果有事务,将抛出异常 TransactionAttribute注释的使用可以声明方法的事务特性!例子演示!
  • 101. Hibernate Annotation与EJB3.0 Persistence框架比较感兴趣的可以研究一下Hibernate Annotation框架 Hibernate Annotation框架的安装 Hibernate Annotation框架的使用 与EJB3.0 Persistence的关系?