@tarena.com.cn1SD0711EJB课堂笔记EJB_day12008-4-28EJB的预备知识:RoadMap路线:Java1、C/S架构的程序swing、++2、Web程序(MVC架构)JSP+Servlet+3、JavaEE程序(多层架构)Web技术+EJB+JavaEE相关(JNDI、JTA、JWS、JMS)EJB学习的目标:1、掌握EJB的基本的原理,理解其基本概念。(重点)企业级程序:HA(高可用性)、安全、可伸缩2、编写各种类型的EJB。(重点)3、了解EJB的一些简单的设计、部署知识。(可选)EJB学习的内容:(11章)第1章:EJB概述(企业级程序背景知识、EJB概念、原理)day1重点第2章:FirstEJB(EJB编程的步骤、EJB3.0编程的模型)第3章:会话Bean(两种会话Bean的编写)重点第4章:会话Bean发布为一个Web服务第5章:实体基础(JPA全称:Java持久化API)重点第6章:消息服务(JMS、MDB)第7章:给EJB增加功能(Bean的调用、公用的标注、依赖注入、拦截器)重点、难点第8章:实体高级部分重点第9章:事务重点第10章:EJB中的安全第11章:定时服务(任务管理)参考书:《精通EJB3.0》、《JavaEnterpriseBean3.0》ThreadIOnetwork主讲老师:程祖红JDBCHibernate体会思想JDBCHibernate@tarena.com.cn2第1章:EJB概述(企业级程序背景知识、EJB概念、原理)一、EJB是什么?What?EnterpriseJavaBean企业JavaBean定义:①采用Java语言②开发、部署服务器端的分布式组件③标准(规范)标准(规范)JSR:JavaSpecificationRequestJava规范请求JCP:JavaCommunityProcess是95年Sun公司定义的一个开放型组织好比丐帮要制定班规,邀请各路长老相会,共同制定规范。国内就有JCP成员:金蝶公司JSR220规范二、企业级程序开发背景知识Why?⑴企业级程序架构发展历史Host/Terminal主机/终端PCUTerm终端(只接收输入/输出,无计算能力)优点:a、安全、可靠,因为有许多冗余组件b、I/O处理能力很强缺点:a、昂贵b、升级、扩展极其不便主流的主机厂商:IBM主机、Unisys主机Client/Server客户机/服务器在客户机中有业务逻辑,胖客户端比如SwingDB客户机(安装GUI)优点:a、开发难度低、经济b、代码易维护缺点:a、维护较为困难,业务的改变需要重新安装GUI和后台b、业务面对客户的数量有限主机ApplicationServer@tarena.com.cn3Multi-layered多层架构(B/S)A、接收http请求业务逻辑的计算数据的存储B、表示逻辑数据访问部分的业务逻辑比如存储过程优点:维护非常方便缺点:开发复杂度较高⑵开发一个企业级程序考虑的问题1、HA高可用性2、安全3、可维护性4、性能5、可伸缩性中间件技术容器提供中间件服务,组件封装业务逻辑,程序员重点在组件组件、容器都满足标准的要求分布式组件:A、组件依赖于容器,而JavaBean直接运行于JVMB、组件依赖于特定的协议C、组件有特定的生命周期,被容器管理的分布式应用:应用程序的逻辑分散在多个服务器之上。RemoteMethodInvocations远程方法调用LoadBalancing负载均衡:怎样平均分担任务TransparentFail-over透明的故障切换Back-endIntegration后端集成新系统集成老系统Transactions事务Clustering集群用多台机器来模拟一台机器的行为DynamicRedeployment动态重新部署CleanShutdown完全关机LoggingandAuditing日志和评审SystemsManagement系统管理Threading线程Message-orientedMiddleware面向消息的中间件浏览器Web服务器应用服务器(可选)DBJVM2方法BJVM1方法A远程方法调用@tarena.com.cn4ComponentLifeCycle组件生命周期Resourcepooling资源池(数据库连接池,线程池,实例池等)是无状态的Security安全性Caching缓存…是有状态的,即两次在caching中取得的可能会不一样。…实现了以上一些技术的产品叫Middleware中间件:它是指与具体业务逻辑无关,可重复使用,代码变化较小的交叉业务逻辑代码。提供中间件的公司:IBM;BEA:被Oracle收购;东方通(国内)--主要做交易中间键⑶为什么要使用EJB(优点)①容器可以提供大量的中间件服务(事务、安全、资源池、缓存、集群、后端集成)②可以简化企业级程序的开发EJB组件IDE③开发分布式应用,目前三大类技术:CORBA(commonobjectrequestbrokorachitecture公用对象请求代理架构)由OMG开发的,和语言、平台无关,但要有一套CORBA现有的类库,最强大,但太复杂;DCoM微软的技术,缺点就是依赖于Windows平台;WebServices性能最低,因大量采用xml;EJB它们都是基于组件的技术④可伸缩、安全的(4)EJB的一些概念:集群:把多个相似配置的Server通过网络组织在一起,形成逻辑上的概念,即用多台机器来模拟一台机器的行为。组件:A一段程序代码,包含了部分业务逻辑(java类)B需要依赖容器来运行C需要客户端调用,要使用特定的协议RMI协议(servlet使用HTTP协议)D可以被组织成一个完整的程序E组件的生命周期由容器来管理组件架构:组件(负责业务)+容器(负责中间件服务)=程序(其中组件和容器要遵守相同的规范)容器:提供组件运行的环境,并提供大量的中间件服务的程序,容器与组件要符合相同的规范,解耦合。三、EJB的基本原理①代理/委托模式委托delegator:原因:C基于安全的原因,入口很严格C可能是一个远程对象,A不知道C在哪台JVM中记录日志、审核等A没办法或不方便访问C,这时就需要通过Delegater委托类来调用C客户端委托类被委托类(目标类)ADelegaterC@tarena.com.cn5委托模式的作用:(1)解耦合,调用者与被调用者(2)为我们提供增值服务代理proxy:要求委托类与被委托类都实现同一个接口,从本质上讲代理也是一种委托模式。代理接口(表示实现接口)客户端代理类被代理类(目标类)②远程方法调用RMI一个Java对象可以透明地访问运行在另一个JVM中的对象。即跨虚拟机,去调另一个虚拟机中的对象的方法。透明表示不用处理网络调用的细节。SUN公司提供RMI协议:RemoteMethodInvocation.相应的API、命令行工具。分布式对象:具有网络使能的Java对象。此对象可以被客户端所访问,不需要考虑网络细节。相对于客户端,是运行在另外的JVM中,此对象可以透明地被远程客户端所调用。Stub:存根对象(1)分布式对象的本地代理;(2)实现了远程接口;(3)编码(RMI协议)、解码、网络连接、寻址Skeleton:骨架对象(1)接受Stub调用请求,将请求进行解码,将请求交给分布式对象,是一种委托关系。(2)编码所以,Stub和Skeleton的作用就是屏蔽网络调用的细节。它们是由RMI的工具rmic来生成的。RMI远程方法调用,不同JVM的进程。运用代理/委托模式使用EJB能够快速开发和部署分布式组件。分布式组件可供远程系统访问。分布式组件又被称为分布式对象、远程对象。无论是同一进程内的客户,还是进程外的客户及网络中的其他客户,都能够与分布式对象进行交互。ADelegaterCIC拦截器远程接口调用@tarena.com.cn6远程方法调用(RMI)过程涉及到的主要步骤如下:(1)客户调用存根(stub),它是客户端提供的代理对象。Stub负责将网络通信屏蔽掉,这对于客户而言意义深远。它能够使用Socket访问网络中的其他资源。而且,还能够将Java对象(参数)转换成底层网络要求的特定格式。(2)借助于网络,存根能够实现与服务器端的骨架(skeleton)进行交互。骨架为服务器端提供的代理对象。骨架负责将网络通信屏蔽掉,骨架能够接收来自Socket的访问请求,还能够将存根构建好的来自客户的参数转换转换成Java表示。(3)骨架将来自客户的调用委派给合适的分布式对象实现。该对象完成具体的访问请求,将结果返回给骨架。则骨架将结果返回给存根,最后客户获得分布式对象的响应结果。注意:Stub和服务器端实现的对象都实现了远程接口。利用接口,暴露Bean类中的业务方法,容器会根据业务接口来产生stub和skeleton以及拦截器。采用代理/委托模式。调用中间件的两种方式:显示中间件调用:需要通过编写代码去调用中间件的API。优点:我们可以细粒度地控制中间件服务缺点:代码的耦合性太高。是指业务代码对中间件代码的耦合。隐式中间件调用:声明式的。优点:代码的耦合性低,编程更加简单,编程效率提高。缺点:属于粗粒度的实施,处于方法之上。请求拦截器:RequestInteceptor①是由容器生成的;②它实现了远程接口;③调用中间件服务;④将请求委托给远程对象。可以通过标注,或部署描述文件,EJB容器会根据这些信息来产生相应的代码。ClientStubDistributedObjectSkeletonNetworkRemoteInterfaceRemoteInterfaceClientStubDistributedObjectSkeletonNetworkRemoteInterfaceRemoteInterface@tarena.com.cn7隐式中间件调用四、EJB的角色(了解)Beanprovider–developEJBsBean开发人员Applicationassembler–applicationarchitect架构师,集成EJB,选型等EJBdeployerEJB的部署人员,选型,打包部署,性能的优化Systemadministrator系统管理员Containerprovider/Serverprovider应用服务器提供商(容器提供商)SUNjavaApplication服务器有两套,一个免费,一个收费;Weblogic;JBoss等Toolvendor工具提供商IDEIBM的WSAD(WebsphereStudioApplication)和Eclipse用法很相似,但功能更强大,收费的,SUN的NetBeans五、EJB相关技术1、JavaEE①用Java语言②简化开发、部署多层的、分布式的企业级应用的标准和平台A、JavaEE提供了一个分层的模型:每一层提供了相应的组件和容器B、提供了设计的参考(Blueprints)容器/应用服务器C、提供标准的API和规范组件D、提供兼容性测试服务ClientStubSkeletonRequestInterceptorServantTransactionServiceSecurityServiceDatabaseDriverNetworkRemoteInterfaceRemoteInterfaceTransactionAPISecurityAPIDatabaseAPIDelegateClientStubSkeletonRequestInterceptorServantTransactionServic