1 / 46

张民 (muslov) 清华大学计算机系知识工程组 硕士 清华大学 SUN 授权 Java 培训中心 讲师 Zhangm@keg.cs.tsinghua

J2EE 平台与 EJB 技术. 张民 (muslov) 清华大学计算机系知识工程组 硕士 清华大学 SUN 授权 Java 培训中心 讲师 Zhangm@keg.cs.tsinghua.edu.cn. 内容. 为什么引入 J2EE ? 什么是 J2EE ? J2EE 的组成 EJB—J2EE 的基石 EJB 的容器和服务器 EJB 的分类 会话 bean 实体 bean EJB 的三个关键构件 EJB 的实现与部署 回顾. 主机系统或单层结构. 数据访问、表示和业务逻辑在一个应用中 功能紧紧耦合在一起

tyrone
Download Presentation

张民 (muslov) 清华大学计算机系知识工程组 硕士 清华大学 SUN 授权 Java 培训中心 讲师 Zhangm@keg.cs.tsinghua

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. J2EE 平台与EJB技术 张民(muslov) 清华大学计算机系知识工程组 硕士 清华大学SUN授权Java培训中心 讲师 Zhangm@keg.cs.tsinghua.edu.cn

  2. 内容 • 为什么引入J2EE? • 什么是J2EE? • J2EE的组成 • EJB—J2EE的基石 • EJB的容器和服务器 • EJB的分类 • 会话bean • 实体bean • EJB的三个关键构件 • EJB的实现与部署 • 回顾

  3. 主机系统或单层结构 • 数据访问、表示和业务逻辑在一个应用中 • 功能紧紧耦合在一起 • 代码复用、代码可维护性、和代码的修改十分困难。 • 不是分布式的,不具有可伸缩性。

  4. Fat client 胖客户端: 表示逻辑 业务逻辑 业务数据模型 通讯 Fat client 传统的客户/服务器:“胖”客户端 • 功能集中,不利于更新和维护; • 数据模型“紧耦合”在每一客户端 • 数据库结构改变将导致全体客户端改变 • 任何一点更新要对每一客户端进行部署 • 数据库连接是针对每一客户端的 • 伸缩困难 • 原始数据通过网络传递:加重网络负担

  5. 三层分布式对象架构 • 客户端:业务数据模型与UI分开,更“瘦” • 业务逻辑在中间层,成为“对象服务”。 • 中间层可以处理多客户端,通过:连接池,多线程,对象一致性处理 • 编程困难

  6. 关于分布式计算 • 对象化的RPC(Remote Procedure Call) • 对象之间的互操作性 • 信息的传递 • 在此方面的解决方案: • CORBA (Common Object Request Broker Architecture) • RMI (Remote Method Invocation) • DCOM (Distributed Component Object Model)

  7. CGI Application 互联网 Web服务器与CGI • WWW浏览方式所带来的: • “Browser-based” 客户端与“Internetworking” • 计算方式向服务器端的集中转化 Html Web Server

  8. N层计算模式的引入 • 从1层到N层,得到的改进: • 每一层可以被单独改变,而无需其它层的改变 • 降低了部署与维护的开销 • 资源(如连接)可以被缓冲和重复利用 • 提高了灵活性、可伸缩性,并使性能提高成为可能 • 瘦客户端的引入使Internet接入方便,而计算被集中至服务器端 • 仍然存在的问题: • 对企业级应用开发人员的要求太高:熟悉分布式协议,进行一致性事务处理,负载平衡,安全……

  9. 构件(component)与中间层开发 • 两个转变: • 计算模式上:网络计算(Network Computing) • 生产模式上:基于构件的开发(Component-based Dev) • 二者的结合: 服务器端中间层构件的开发

  10. 构件的优点与特点 • “一个软件构件是一个组合的单位,它包括合同化声明的接口及明确说明的上下文相关性。一个软件构件可以被独立部署且服务于第三方所做的组合。 • 构件的特点: • 构件是编译码 • 构件是一个独立部署的单位 • 构件是一个由第三方进行组合的单位 • 构件没有持久的状态 • 构件的优点: • 可插入 • 更好的设计 • 更好的复用 • 方便的更新 • 实现与接口分离

  11. 在企业级应用开发中的问题 • 分布式 • 可移植 • 面向Web体系 • 可装配 • 满足企业计算要求 • 一致性 • 事务性 • 安全性 • 好的特性 • 可伸缩 • 可扩展 • 易维护

  12. 应用服务器 • 应用服务器可以为服务器端构件提供: • 一致性,事务处理与负载平衡 • 从而简化了编程工作 • 但在J2EE之前,这些API是应用服务器相关的!

  13. 为什么需要J2EE • 分布式、可移植构件的框架 • 简化服务器端中间层构件的设计 • 为构件与应用服务器提供标准API 为什么会是J2EE而不是 “X” 2EE //~grin

  14. 企业版对开发者和用户来说…… • 更短的开发时间 • 可重用构件 • JSP • EJB • 自由的选择 • 双向选择 • 简化的连接 • XML,JDBC,RMI-IIOP

  15. J2EE组成部分 J2EE Specification J2EE Reference Implementation J2EE J2EE Compatibility Test Suite J2EE Blue Prints

  16. J2EE • Open and standard based platform for developing, deploying and managing n-tier, Web-enabled, server-centric enterprise applications • 开放的、基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用。

  17. J2EE架构

  18. 容器和构件 容器处理 构件处理 • 一致性 • 安全性 • 可获得性 • 可伸缩性 • 事务性 • 分布性 • 生命周期管理 • (持久性) • 表示 • JSP, Servlet, Applet • 业务逻辑 • EJB • 数据访问逻辑 • EJB

  19. J2EE 1.2中的API与技术 • Java 2 SDK, Standard Edition 1.2 • RMI/ IIOP 1.0 • JDBC™ 2.0 • Java Messaging Service 1.0 • JNDI 1.2 • Servlet 2.2 • JavaServer Pages™ 1.1 • JavaMail 1.1 • JavaBeans™ Activation Framework 1.0 • Enterprise JavaBeans 1.1 • Java Transaction API 1.0

  20. EJB—J2EE的基石 • Enterprise JavaBeans(EJB) 是: Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。 • EJB容器是: 一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。 • EJB服务器是: 管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。

  21. EJB 服务器和容器

  22. EJB 容器的责任

  23. EJB的分类 • Entity Bean • Container-Managed Persistence Entity Bean • Bean-Managed Persistence Entity Bean • Session Bean • Stateful Session Bean • Stateless Session Bean Enterprise Bean

  24. 实体bean(Entity Bean) 业务数据模型 • 对业务概念的反映,也称为领域类(domain class) • 在持久存储中业务实体的对象视图 • 提供访问和操作数据的对象封装 • 支持多用户共享的数据 • 可以从数据库中存储的属性重新实例化 • EJB 服务器崩溃后仍可重构 • 与数据库中的数据有一样长的生命

  25. 实体bean的持久性 • Bean-Managed Persistence(自管理的持久性) • 优点: • 开发者有完全的控制 • 无需复杂的提供商支持 • 缺点: • 编码复杂 • 在改变时需要重新编码和部署 • 影响可移植性 • Container-Managed Persistence(容器管理的持久性) • 优点: • 提供商解决,可能会有更好的缓冲和性能 • 在部署描述符中进行改变即可 • 可移植性好 • 缺点: • 对容器提供商的工具依赖性强 • 可能不易反映复杂的数据关系

  26. Session Entity Entity Entity 会话bean(Session Bean) • 会话bean经常用于涉及多个实体bean的业务处理和控制逻辑。

  27. 会话bean(Session Bean)(2) • 相对生命较短(一般与客户同步) • 在EJB服务器崩溃时被删除 • 不表示数据库中的数据,但可以访问数据 • 作为一个客户的代表执行功能 • 可以加入事务

  28. 何时使用会话Bean • 使用会话bean 对针对于某一客户的处理或控制对象建模 • 对工作流、任务和管理活动等建模(如订房、购物车等) • 协调多个实体bean,控制实体bean之间的交互 • 将业务应用逻辑从客户端转移到服务器端

  29. 会话bean 表示一个业务过程 每一客户一个实例 Short-lived:与客户生命同步 暂态的 服务器崩溃后丢失 可以是事务性的 实体bean 表示业务数据 在多个客户间共享实例 Long-lived:与数据库中数据同步 持久的 服务器崩溃后可重构 总是事务性的 会话Bean?实体Bean?

  30. 两种类型的会话bean • 无状态(Stateless)bean • 表达一个无状态的服务(如列表,mail) • 不存储用户相关信息,进行对请求的响应 • 暂态的 • 可用来构造响应频繁而简单的访问的bean池 • 有状态(Stateful)bean • 维护客户状态

  31. 一个EJB的三个关键构件 作为Bean的开发者,主要关注于三个构件: • EJBHome 接口(扩展javax.ejb.EJBHome接口):使用了factory设计模式,定义了创建、查找EJB的方法。 • EJBObject接口(扩展javax.ejb.EJBObject接口):使用了proxy设计模式,定义了在bean中实现的业务逻辑方法。 • Bean实现类(实现javax.ejb.EntityBean/SessionBean):实现业务逻辑。

  32. EJB的实现(举例)—创建远程接口 // business methods public interface Account extends EJBObject { //return the account information corresponding to this account. public AccountModel getDetails() throws RemoteException; // updates the contact information for the specified account public void changeContactInformation(ContactInformation info) throws RemoteException; }

  33. EJB的实现—创建Home接口 public interface AccountHome extends javax.ejb.EJBHome { public Account create(String userId, String status, ContactInformation info) throws RemoteException,DuplicateKeyException,CreateException; public Account findByPrimaryKey (String userId) throws RemoteException, FinderException; }

  34. EJB的实现—AccountBean的实现 public class AccountEJB implements EntityBean { // entity state private String userId; private String status; private ContactInformation info; // resources private EntityContext context; // implement account interface business methods public void changeContactInformation(ContactInformation info) { this.info = info; } public AccountModel getDetails() { return(new AccountModel(userId, status, info)); }

  35. EJB的实现—AccountBean的实现(2) // must match signatures of create methods in Home interface public String ejbCreate (String userId, String status, ContactInformation info) throws DuplicateKeyException,CreateException { // set the instance data this.userId = userId; this.status = status; this.info = info; AccountDAO ADAO = new AccountDAO(userId, status,info); try{ ADAO.create(); // insert data in database return (userId); // return primary key }catch (java.sql.SQLException se) { throw new CreateException ("SQL Exception in create:" + se); } }

  36. EJB的实现—AccountBean的实现(3)

  37. Create, find client Glue EJBObject Bean EJBHome Business Method container server 从客户端看的EJB视图

  38. 从更深层次理解EJB视图 JDK javax.ejb Bean Provider xxx Container Provider

  39. EJB的其它方法与生命周期

  40. EJB的事务处理 • EJB服务器的概念使平台提供商可以在可伸缩的、可靠的、分布的事务服务方面提供增值服务。 • 事务提供一个“all-all-nothing”的简单模型来管理工作,即所有对象成功更新,所有工作成功提交,或者一个对象失败而整个工作回滚。 • bean的客户可以以两种方式驱动事务: • 在“部署描述符”中声明“公布的事务”(declarative transactions) • 使用用户事务API(JTA)来驱动事务

  41. EJB构件的实现步骤 • 创建远程接口 • 创建Home接口 • 创建Bean的实现类 • 编译远程接口、Home接口、bean实现类 • 创建部署描述符 • 将以上三个文件与部署描述符文件打包为一个ejb-jar文件 • 部署EJB构件

  42. 回顾J2EE架构

  43. J2EE应用的形式

  44. 几点体会 • 1. 清晰、统一的概念 • 2. 标准的接口,屏蔽底层的实现(JDBC,EJB…Java) • 3. 实现方式的多样化——trade-off与充分的选择权 • CMP,BMP • JTA, • 4. 标准 vs. 扩展(语义的可理解性与可表达性)

  45. 文档资源 • Sun Techdays 文档 • Designing Enterprise Applications with the Java 2 Platform, Enterprise Edition,Nicholas Kassem and the Enterprise Team(jbp-1_0_1b-doc.pdf) • http:// java. sun. com/ j2ee • http:// java. sun. com/ products/ ejb • http:// java. sun. com/ products/ jsp • http:// java. sun. com/ products/ servlet • http:// java. sun. com/ products/ jndi • Server-Side Components –A Pattern Language, Markus Völter, MATHEMA AG, Germany

  46. 谢 谢 !

More Related