930 likes | 1.2k Views
J2EE 应用服务器 PKUAS. 刘天成 liutch@cs.pku.edu.cn 北京大学信息科学技术学院 软件研究所 2004 年 12 月 2 日. 目录. 一、 J2EE 技术介绍 J2EE 发展背景 J2EE 整体框架 J2EE 应用开发 构件技术: Enterprise Java Bean 二、 PKUAS 介绍 PKUAS 概览 主要技术特点 功能和性能 当前状况. J2EE 发展背景( 1 ). 企业应用向分布式应用的转移 实现互连 提供各种企业服务,如 : 安全,事务 多种技术出现,满足分布式应用的开发: CORBA
E N D
J2EE应用服务器PKUAS 刘天成 liutch@cs.pku.edu.cn 北京大学信息科学技术学院 软件研究所 2004年12月2日
目录 • 一、J2EE技术介绍 • J2EE发展背景 • J2EE整体框架 • J2EE应用开发 • 构件技术:Enterprise Java Bean • 二、PKUAS介绍 • PKUAS概览 • 主要技术特点 • 功能和性能 • 当前状况
J2EE发展背景(1) • 企业应用向分布式应用的转移 • 实现互连 • 提供各种企业服务,如:安全,事务 • 多种技术出现,满足分布式应用的开发: • CORBA • COM/DCOM • .NET
J2EE发展背景(2) • 激烈的商业竞争,对技术的更高要求 • 时间快 • 低成本 • 多功能 • 高可靠 • 易扩展 • 易集成 :快速开发,快速响应新技术和新要求 :易于开发,降低成本 :提供数据库服务,自动邮件服务等 :完善的安全服务和事务服务 :构件核心机制提供了扩展性和移植性 :通过采用CORBA的互操作协议等集成ERP等遗留应用
J2EE发展背景: 中间件的演化 • Historically, mission-critical apps were built directly atop hardware • Tedious, error-prone, & costly over lifecycles • There are layers of middleware • Commonalities abstraction • Separation of concern
J2EE发展历史及现状 • 历史可追溯到1997年,1999年由SUN公司发起,包括IBM,Oracle,Sybase,BEA等公司共同提出了J2EE分布式框架 • 目前多家大公司都有成熟产品支持: • IBM:WebShpere • BEA: WebLogic • Oracle:9iAS • JBoss:JBoss • ObjectWeb:JOnAS • 金蝶:Apusic
目录 • 一、J2EE技术介绍 • J2EE发展背景 • J2EE整体框架 • J2EE应用开发 • 构件技术:Enterprise Java Bean • 二、PKUAS介绍 • PKUAS概览 • 主要技术特点 • 功能和性能
J2EE 平台 • 一组完整套件 • J2EE规范: Specification • J2EE参考实现: J2EE Reference Implementation • J2EE兼容性测试集: J2EE Compatibility Test Suite • J2EE蓝图程序: J2EE Blue Prints
J2EE特点 • 目标:易于开发分布式应用 • 技术特点: • JAVA语言的跨平台特性 • 基于构件的应用模式:EJB • 多种技术的集成 • 互操作和集成能力
表示层 业务逻辑层 数据层 Applet容器 Web容器 EJB容器 遗产 系统 Applet JSP J2SE EJB Servlet J2SE J2SE 独立客户容器 数据库 管理 系统 独立客户 J2SE J2EE应用服务器 J2EE体系结构 • 支持构件的服务器端中间件
EJB — J2EE的基石 • Enterprise JavaBeans (EJB) 是: Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。 • EJB容器是: 一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。 • EJB服务器是: 管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。
目录 • 一、J2EE技术介绍 • J2EE发展背景 • J2EE整体框架 • J2EE应用开发 • 构件技术:Enterprise Java Bean • 二、PKUAS介绍 • PKUAS概览 • 主要技术特点 • 功能和性能
6方参与共同构筑J2EE应用 • J2EE平台提供者 • 应用构件创建者 • 应用组装者 • 部署者 • 系统管理者 • 工具提供者
应用构件创建者 • 提供enterprise beans. • 一个bean就是一个可以重用的构件 • 重用级别(从低到高) • Reuse as given • Reuse by customization • Reuse by extension(subclass)
应用组装者 • 通过组装构件来构建应用 • 编写调用各个构件的代码 • 提供构件间的调用流程 • 提供用户接口 • 编写新的基于特定领域的EJB
EJB部署者 • 将一个或者多个EJB-jar文件作为一个应用部署到一个运行中的操作环境中(应用服务器) • 解析所有的外部依赖条件 • 将所有的EJB进行部署,例如对安全设置进行映射等
系统管理者 • 监控已经部署的系统
目录 • 一、J2EE技术介绍 • J2EE发展背景 • J2EE整体框架 • J2EE应用开发 • 构件技术:Enterprise Java Bean • 二、PKUAS介绍 • PKUAS概览 • 主要技术特点 • 功能和性能
EJB概念 • EJB — Enterprise Java Bean • Enterprise—highly scalable,highly available,highly reliable,highly secure,transactional,distributed application • JavaBeans—component model(client-side) • EJB—扩充构件模型,实现了企业级Java平台上的服务器端构件模型 • 构件模型 • Activex, JavaBeans • 业务逻辑过于简单,无法满足企业应用需求
定义 • EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构
EJB特性 • 能够重用,一次编写,到处运行 • 对服务器端计算能够分而治之 • 减少了构建企业级应用的时间 • 单线程构件 • 开发者不需要考虑代码是否线程安全 • 容器自动进行负载平衡,将请求发到不同的实例进行处理
EJB的分类 • Entity Bean • Container-Manage Persistence Entity Bean • Bean-Manage Persistence Entity Bean • Session Bean • Stateful Session Bean • Stateless Session Bean • Message Driven Bean
实体bean(Entity Bean) 业务数据模型 • 对业务概念的反映,也称为领域类(domain class) • 在持久存储中业务实体的对象视图 • 提供访问和操作数据的对象封装 • 支持多用户共享的数据 • 可以从数据库中存储的属性重新实例化 • EJB 服务器崩溃后仍可重构 • 与数据库中的数据有一样长的生命
实体bean的持久性 • Bean-Manage Persistence(自管理持久性) • 优点: • 开发者有完全的控制、无需复杂的提供商支持 • 缺点: • 编码复杂、在改变时需要重新编码和部署、影响可移植性 • Container-Manage Persistence(容器管理持久性) • 优点: • 提供商解决,可能会有更好的缓冲和性能、在部署描述符中进行改变即可、可移植性好 • 缺点: • 对容器提供商的工具依赖性强、可能不易反映复杂的数据关系
Session Entity Entity Entity 会话bean(Session Bean) • 会话bean经常用于涉及多个实体bean的业务处理和控制逻辑。
会话bean(Session Bean)(2) • 相对生命较短(一般与客户同步) • 在EJB服务器崩溃时被删除 • 不表示数据库中的数据,但可以访问数据 • 作为一个客户的代表执行功能
何时使用会话Bean • 使用会话bean 对针对于某一客户的处理或控制对象建模 • 对工作流、任务和管理活动等建模(如订房、购物车等) • 协调多个实体bean,控制实体bean之间的交互 • 将业务应用逻辑从客户端转移到服务器端
会话bean 表示一个业务过程 每一客户一个实例 Short-lived:与客户生命同步 暂态的 服务器崩溃后丢失 可以是事务性的 实体bean 表示业务数据 在多个客户间共享实例 Long-lived:与数据库中数据同步 持久的 服务器崩溃后可重构 总是事务性的 会话Bean?实体Bean?
两种类型的会话bean • 无状态(Stateless)bean • 表达一个无状态的服务(如列表,mail) • 不存储用户相关信息,进行对请求的响应 • 暂态的 • 可用来构造响应频繁而简单的访问的bean池 • 有状态(Stateful)bean • 维护客户状态
EJB构件的实现步骤 • 创建远程接口 • 创建Home接口 • 创建Bean的实现类 • 编译远程接口、Home接口、bean实现类 • 创建部署描述符 • 将以上三个文件与部署描述符文件打包为一个ejb-jar文件 • 部署EJB构件
EJB的组成 • Java文件 • Bean类 • Home接口 • Remote接口 • PK(Primary Key)类 • 部署描述符 • ejb-jar.xml, pkuas-ejb.xml, pkuas-web.xml, database.xml…… • application.xml
一个EJB的三个关键类 作为Bean的开发者,主要关注于三个类: • EJBHome 接口(扩展javax.ejb.EJBHome接口):使用了factory设计模式,定义了创建、查找EJB的方法。 • EJBObject接口(扩展javax.ejb.EJBObject接口):使用了proxy设计模式,定义了在bean中实现的业务逻辑方法。 • Bean实现类(实现javax.ejb.EntityBean/SessionBean):实现业务逻辑。
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; }
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; }
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)); }
EJB的实现—AccountBean的实现 // 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); } }
PKUAS上可部署包形式 • 直接部署EJB • 以Java ARchive(jar)的形式 • 里面包含一个或多个EJB • Web模块 • 以Web ARchive(war)的形式 • 里面包含JSP页面、JavaBeans等 • 企业应用 • Enterprise ARchive (ear) • 里面包含一个或多个EJB模块(每个EJB模块为一个jar文件)和一个或多个Web模块(每个Web模块为一个war文件)
应用组装、部署过程 • 编写EJB、JSP、JavaBeans等 • 编译Java类(包括EJB等) • 为EJB编写部署描述文件(ejb-jar.xml, pkuas-ejb.xml) • 为EJB打包(包含EJB需要的类以及它的部署描述文件) • 为每个Web模块编写部署描述文件(web.xml) • 为每个Web模块打包(包含这个Web模块的JSP、JavaBeans和其它类、页面文件等) • 编写整个应用的部署描述文件(application.xml) • 为整个应用打包(包含所有EJB、Web模块以及应用部署描述文件) • 部署应用、启动PKUAS
编译Java类 • CLASS_PATH • ejb2.0.jar、pkuas.jar、jmxri.jar • 同时编译所有类 • EJB接口、EJB的Bean类等
Create, find client Glue EJBObject Bean EJBHome Business Method container server 从客户端看的EJB视图
从更深层次理解EJB视图 JDK javax.ejb Bean Provider xxx Container Provider
消息驱动Bean(Message Driven Bean) • 提供对异步调用的支持 • 作为Java Message的消费者