1、1,J2EE Overview,2,Java 2平台,3,What is J2EE?,支持以构件化的方法开发、部署、管理多层结构的分布式企业(Web)应用。提供一种统一的、开放标准的多层平台。构件依赖于系统级实体容器(Container)的运行时支持。编程思想:组件-容器容器提供:生命周期管理构件的部署为构件的运行指派线程(构件不是独立运行的)许多构件行为都可以在部署时以声明的方式进行定制。,4,J2EE平台技术,应用构件(组件)由开发人员实现,构成应用系统运行在J2EE平台上包含:客户端构件AppletsApplication Clients服务端构件Web构件(Servlets, JSPs
2、)EJBs,5,J2EE平台技术,服务J2EE应用构件所使用的功能由J2EE平台提供商实现,分为:Service API(开发时使用)运行时服务,6,J2EE平台技术,通信支持协作构件之间的通信由Container提供,7,J2SE,J2SE,J2SE,J2EE平台的执行模型,JMS,JNDI,RMI/IIOP,JDBC,JavaMail,JAF,Application Client Container,JMS,JNDI,RMI/IIOP,JDBC,JTA,JCA,Web Container,EJB Container,Database,EIS(CICS),EIS(SAP),Applet Co
3、ntainer,J2SE,Applet,ApplicationClient,Servlet,JSP,EnterpriseBean,HTTPSSL,HTTPSSL,RMI/IIOP,Client Tier,Middle Tier,EIS Tier,JavaMail,JAF,JMS,JNDI,RMI/IIOP,JDBC,JTA,JCA,8,Component/Container结构,Comp,Services J2EE Container,不需要关心底层(复杂的)常用服务的实现(事物控制,安全性控制、命名服务等),提供底层常用的服务,Comp,Comp,Comp,9,Container,每个J2E
4、E构件都运行在某个特定的容器内,容器由J2EE平台提供商提供。容器为组件提供特定的开发用服务和运行时服务(如生命周期管理、安全性管理、事务处理等)不同类型的容器提供不同的服务。组件与容器遵循一个标准规范,从而保证二者之间既松耦合,又强有力地交互,这个规范就是J2EE。,10,开发与部署的分离,开发与部署互不相关,不互相限制。开发与部署的分离大大提高了可重用性和可维护性,也使得软件不依赖于具体的厂商。开发人员一次开发的软件可以部署在不同的环境中不同的系统资源,如数据库不同厂商的平台上不同事务处理、安全性控制策略的应用场合开发与部署的分离要依赖于J2EE平台提供的大量的服务和系统级特性以及J2EE
5、标准的开放性。,11,基于角色的开发过程,将构建整个软件系统的任务划分到不同的角色明确的划分任务与责任不同的阶段有不同的关注重点,这种划分使得每个角色仅关注他所要完成的工作实现了开发与部署的分离.,12,J2EE Application Components,13,Client Side Components - Applets,Java类图形界面( GUI)组件,一般运行在Web浏览器中,也可以运行在支持applet编程模型的应用中(如Java SDK中的appletviewer)。在J2EE应用中一般用来提供用户界面。,14,Client Side Components Applicati
6、on Clients,Java程序一般具有图形用户界面。可以直接访问J2EE中间层的所有构件。可以直接调用EJB提供的服务。一般基于浏览器的客户端只能直接访问Web构件的服务,15,Server-Side Components - Servlets,Java类运行在服务端不需要图形界面接收HTTP请求,动态生成HTTP响应。,16,Server-Side Components - Servlets,/demostrate handling a GET requestimport java.io.*;import javax.servlet.*;import javax.servlet.http
7、.*;public class GetDemo extends HttpServletpublic void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException, IOExceptionresp.setContentType(text/html);PrintWriter out = resp.getWriter();String username = req.getParameter(uname);String password = req.getParameter(userpw);out.
8、println();out.println(GetDemo);out.println();out.println(Hello + username + );out.println(Your password was : + password +);out.println();out.println();out.close();,17,Server-Side Components - Servlets,18,Server Side Components - Java Server Pages (JSP),HTML document:嵌入了JSP特定的tag在页面中加入Java代码,动态生成页面的
9、内容在服务器端,JSP页面被编译成Java Servlet执行。,Ch2 Simple jspDate and Time: hellohow are u?,19,Server Side Components - Enterprise JavaBeans (EJB) (1 of 2),EnterpriseJava Beans,Entity Beans,ContainerManagedPersistence,BeanManagedPersistence,Session Beans,Stateless,Stateful,Message DrivenBeans,EJB 2.0中引入,20,Server
10、 Side Components - Enterprise JavaBeans (EJB) (2 of 2),客户端利用JNDI查找EJB Home。客户端利用EJB Home的create方法创建一个 EJB。本地EJB Home通知容器创建一个远程 EJB构件。容器向客户端返回EJB Object stub。客户端调用EJB Object上的方法,调用被转发到远程的EJB完成。,J2EE Services: Service API,Service API - JNDI(1/6),Service API - JNDI(1/6),JNDI屏蔽了不同目录服务之间的差异。JNDI service
11、API是和具体的目录服务无关的。这使得我们利用JNDI开发的应用可以不用修改代码而应用到不同的目录服务上。,Service API - JDBC(2/6),Service API - JDBC(2/6),目前JDBC service API的版本是JDBC 2.0。JDBC 2.0包含了一个内嵌的数据库连接池。 增强了应用的数据库无关性。,Service API - JTA(3/6),事务(交易)管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事务具有如下特性:原子性所有相关的操作必须全部成功;如果任何一个操作失败,则所有操作全部撤销。一致性 一致性保证事务所作的任何改变不会使系统处于
12、无效状态。隔离性 并发的事务不会互相影响。事务访问的任何数据不会受其它事务所作的修改的影响,直到第一个事务完成。耐久性事务提交时,对数据所作的任何改变都要记录到持久存储器中。通常由事务日志实现。,Service API - JTA(3/6),More concerns on distributed transaction因为分布式事务可能会跨越多个组件、多台机器,并可能涉及多个数据源,所以需要一种两阶段提交协议来实现。JTA:Java Transaction API支持分布式事务处理的标准API,与实现无关。如WebSphere中,利用一种支持两阶段提交的数据库驱动来实现JTA。可以通过在代码
13、外的描述来定义事务处理级别参Run-time Service - Transaction,Service API J2EE Connector Architecture (JCA) (4/6),J2EE Server Runtime,JCA,J2EE构件,J2EE构件,J2EE构件,Resource Adapterfor the EIS CICS,Resource Adapterfor the EIS IMS,Resource Adapterfor the EIS SAP,EIS(SAP),EIS(IMS),EIS(CICS),与具体要连接的系统无关的统一的API,由EIS厂商或者第三方厂商提
14、供,Service API - Java Mail(5/6),Java Mail API定义了一组在程序中用来 调用邮件功能的API。这组API屏蔽了 真正的邮件服务所使用的协议。Sun提供了一种Java Mail API的实现, 支持我们在应用中使用Email功能。,Service API - Java Mail(5/6),Java Mail service API使得Email可以在Internet中跨越平台和邮件协议传输。,Service API - Java IDL(6/6),Java IDL service API是用Java实现 的CORBA规范。支持异质(heterogeneou
15、s)对象的连接 与互操作性。,J2EE Services: Run-time Services,Run-time Services Life cycle,主要指EJB的生命周期管理由Container来管理运行于其中的构件的生命周期EJB规范统一了生命周期管理策略厂商实现J2EE平台时按照规范实现生命周期管理功能编写构件时要注意构件的生存期特性,Run-time Services - Transaction,事务(交易)管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事务具有如下特性:原子性所有相关的操作必须全部成功;如果任何一个操作失败,则所有操作全部撤销。一致性 一致性保证事务所作
16、的任何改变不会使系统处于无效状态。隔离性 并发的事务不会互相影响。事务访问的任何数据不会受其它事务所作的修改的影响,直到第一个事务完成。耐久性事务提交时,对数据所作的任何改变都要记录到持久存储器中。通常由事务日志实现。,Run-time Services - Transaction,More concerns on distributed transaction因为分布式事务可能会跨越多个组件、多台机器,并可能涉及多个数据源,所以需要一种两阶段提交协议来实现。Container-Managed Transaction容器来管理事务,method-level可以在部署时指定事务属性Bean-Ma
17、naged Transaction程序员在代码中利用JTA控制事务,Run-time Services - Security,安全控制级别认证(Authentication)Who r u?授权(Authorization)判定某个个体(Principal)是否具有在特定资源上执行某种操作的权限。资源:网页、Servlets、JSPs、EJBs等。,Run-time Services - Security,安全性控制声明的方式由容器控制声明一些安全性角色,并把角色映射到实际的安全域中Security-Role:逻辑的用户组,如经理角色、职员角色Security-Domain:安全控制实际应用的
18、领域,如操作系统域、实际的应用域(xx公司)声明一些规则来进行安全性控制规则1:“经理”角色可以执行“员工管理”Bean的“辞退员工”方法规则2: “所有人(未经过身份认证)”可以访问商品信息页面,Run-time Services - Security,安全性控制编程的方式,要结合声明的方式使用EJBContext.getCallerPrincipal()EJBContext.isCallerInRole(String role),Run-time Services - Persistence,Entity Bean相关的数据库操作由两种实现方式:Container Managed Pers
19、istence由容器进行具体的数据库操作Bean Managed Persistence由程序员自己写代码(使用JDBC)完成具体的数据库操作,Run-time Services Resources,J2EE运行平台维护/管理应用所用到的系统资源:数据库连接池系统线程池带来的好处提高系统资源的利用率和效率应用程序与具体的资源相对无关(开发与部署分离),Communications,Communications: RMI and RMI/IIOP,RMI - Remote Method Invocation特定于Java语言,仅支持用Java语言编写的对象之间进行远程交互。使用JRMP (Jav
20、a Remote Messaging Protocol) 协议通信。RMI/IIOP Internet Inter-ORB Protocal Internet间对象请求代理协议基于IIOP实现的RMIEJB客户端使用 RMI/IIOP与EJB通信厂商的实现使得程序员不必关心协议的细节。,Communications: JMS,JMS - Java Messaging Service定义了一组API,提供可靠的、 异步的消息发送和接收功能。不同的厂商根据API实现异步 消息处理机制一般提供一个消息服务器,J2EE应用程序,J2EE应用组装与安装,Packaging,构件提供者开发的构件被打包在不
21、同的文档中JAR - Java ArchiveEJBs, Application ClientsWAR - Web ArchiveJSPs, HTML, GIF, JPG, Servlet classEAR - Enterprise ArchiveJARs and WARsDeployment Descriptor打包JAR、WAR、或EAR都需要提供相应的DD。,J2EE Packaging,J2EE Packaging Contents,Deployment Descriptors,XML格式的文件用于描述:模块中所包含的组件模块所需要的环境(如安全性控制)每个模块或ear文件都有一个DD
22、。可以由厂商提供的工具自动生成,并进行可视化的编辑:如Websphere可以手工创建和编辑,EJB Deployment Descriptor,The ejb-jar.xml同一jar文档中的所有EJB共享一个DD对于每个EJB,描述了Home接口,Remote接口以及Bean实现的名字对于Session Beans:说明类型对于Entity Beans:说明持久性策略对于CMP:指名主键(primary key)以及由容器管理的字段事务管理类型如果由容器管理事务,指定EJB方法的事务属性环境入口EJB引用该EJB使用的安全性角色Method-mapping (将安全性角色映射到方法上),WA
23、R Deployment Descriptor,The web.xml定义该模块中包含的servlets, JSP, 以及静态资源Servlet URL pattern, class/file, attributes安全性限制为每个URL指定安全性角色可以执行的方法: GET, POST, 等登陆配置如何进行身份认证EJB and Resource references该模块使用的安全性角色,EAR Deployment Descriptor,The application.xml定义了EAR文件中包含的所有模块:EJB jarsWARsApplication Client jars定义安全性
24、角色,基于角色的开发,J2EE中的角色,J2EE规范将应用系统的生命周期映射到了6个角色:J2EE Product ProviderTool ProviderApplication Component ProviderApplication AssemblerDeployerSystem Administrator,J2EE中的角色,一个角色的输出经常是另一个角色的输入如Application Assembler将Application Component Provider开发的构件组装成应用,而Deployer则将Application Assembler组装的应用部署到运行平台上。同一个(
25、组)人可能会执行两个或多个角色的任务。一个角色的任务也可能由几个(组)人完成。,J2EE中的角色,J2EE Product Provider实现J2EE产品API,提供J2EE应用的运行环境IBM、BEA、SunWebsphere Application ServerWebLogic Application ServerIPlanetJ2EE Reference Implementation,J2EE中的角色,Tool Provider提供工具支持J2EE平台上的任务开发环境WSADWeblogic BuilderJBuilder应用组装工具管理/监视工具等,J2EE中的角色,Applicat
26、ion Component Provider提供组成应用的构件以及相关的DDApplication Assembler将构件提供者提供的构件组装成应用。Deployer将应用安装配置到运行环境中。,J2EE中的角色,System Administrator进行配置数据的备份配置企业级应用进行应用统计分析和性能分析创建服务器组和服务器克隆以优化系统性能管理并控制应用的安全性,J2EE中的角色,EJB,Servletand JSP,ApplicationClient,EJBModule,WebModule,App ClientModule,Application,Application Serve
27、r,EJB Container,Web Container,Client Container,Tool Provider提供开发/测试工具,Application Component Provider利用工具实现构件,Tool Provider提供组装工具,Application Assembler利用工具组装应用,Deployer安装应用,J2EE ProductProvider提供容器,System Administrator管理/维护系统,开发阶段,集成阶段,运行/维护阶段,Tool Provider提供部署工具,MVC设计模式,MVC设计模式,J2EE平台的执行模型,JMS,JNDI,
28、RMI/IIOP,JDBC,JavaMail,JAF,Application Client Container,Applet Container,J2SE,J2SE,J2SE,JMS,JNDI,RMI/IIOP,JDBC,JTA,JCA,Web Container,JavaMail,JAF,J2SE,JMS,JNDI,RMI/IIOP,JDBC,JTA,JCA,EJB Container,Database,CICS,IMS,Applet,ApplicationClient,Servlet,JSP,EnterpriseBean,HTTPSSL,HTTPSSL,RMI/IIOP,Client Tier,Middle Tier,EIS Tier,Benefits of J2EE,Benefits of J2EE,架构特点独立于硬件配置和操作系统坚持面向对象的设计原则灵活性、可移植性何互操作性轻松的企业信息系统集成,Benefits of J2EE,支持多层应用开发模型,尤其是基于web的应用。将实现多层结构应用的工作分为两部分系统服务由平台提供开发者关注于商业逻辑和表示逻辑的实现Write Once, Run AnywhereJ2EE是一个开放标准Java的特性丰富的部署时定制特性安全性控制资源管理明确划分任务与责任灵活的安全性模型,