您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > JAVA工程师EJB面试题集
JAVA工程师EJB面试题集EJB(EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在J2EE里,EnterpriseJavaBeans(EJB)称为Java企业柄,是Java的核心代码,分为整体柄和片段柄和消息柄三个部分,其中的消息柄将在以后再作讨论。现在我们来看看什么是整体柄和片段柄。整体柄是一种对象:标准Java对象由创建它的程序创建,当程序终止时,对象也随之丢失,这就意味着当再次运行些程序时,将无法找到先前创建的柄,而整体柄会一直存在着直到它被删除。一个程序可以创建一个整体柄,并且这个程序可以在被保存后随时停止和重启。整体柄将会依然存在。重启后,程序可以找到与之相对应的整体柄,并且会继续使用这个整体柄。EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理...一.什么是EJB?一个技术规范:EJB从技术上而言不是一种产品EJB是一种标准描述了构建应用组件要解决的:可扩展(Scalable)分布式(Distributed)事务处理(Transactional)数据存储(Persistent)安全性(Secure)二.Sun对EJB的期望提供一个标准的分布的、基于OO的组件架构屏蔽复杂的系统级功能需求Writeonce,runanywhere与非Java应用之间的互操作能力兼容CORBA标准三.为什么选择EJB?EJB服务器完成繁杂的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于4GL语言设计的目标)支持事务处理多个业务操作同时成功,或全部失败可以通过在代码外的描述来定义事务处理级别可扩展性EJB可以根据您应用的增长而扩展EJB服务器往往还提供了负载均衡和安全性:由EJB服务器提供资源的访问权限控制四.EJB架构为了满足架构的目标,规范中描述了服务器(Server)容器(Container)类(Class)和实例(Instance)Home和Remote接口客户端(Client)五.简化的编程模型关注于业务逻辑实现:EJB负责生命周期(lifecycle),数据存储(persistence),事务处理语义(transactionalsemantic),安全(security),...通用的编程模型:各种服务的高层APIJava是其编程语言1.EJB特点由一个EJB容器在运行时创建和管理EJB在部署EJB时定制其运行方式由EJB容器和服务器来协调客户端的访问可以部署到任何兼容的EJB容器中客户端对EJB的视图是由Bean开发人员决定的2.EJB服务器管理EJB容器(它管理Bean)提供对操作系统服务的存取提供Java相关的服务,尤其是通过JNDI访问命名空间基于OTS的事务处理服务3.EJB容器管理Bean生命周期:将EJB服务器提供的服务传递给Bean生成代码来实现对Bean的存取访问强制事务处理的限制创建、初始化和回收Bean管理持久数据的存储对客户端而言EJB容器是透明的4.在一个EJB服务器中的容器目前容器通常是由EJB服务器本身提供的在EJB1.0或1.1规范中没有定义容器-到-服务器的接口各厂商可以根据他们的见解来实现服务器和容器的各自责任5.容器提供服务:数据存储容器决定何时载入/储存状态Container-ManagedPersistence(容器管理存储/CMP)容器负责存储您的Bean容器生成必要的类和代码Bean-ManagedPersistence(Bean管理存储/BMP)Bean开发人员提供存储代码开发人员决定如何存储,容器仍然决定何时进行6.容器提供服务:事务处理可以由容器代理来实现容器将得到业务逻辑方法的事务处理需求容器提供事务控制代码也可以由程序员通过代码实现7.容器提供服务:其它服务其它服务包括命名(Naming)安全(Security)线程管理(Threadmanagement)这些服务由容器代理完成将减少应用开发人员的负担8.分布式对象运算远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大EnterpriseJavaBeans永远运行在服务器上:对Bean的访问永远是远程调用9.Stub和Skeleton由EJB生成:Stub对要传递出去的信息编码Tie/Skel将接受到的信息解码并传递给目标对象10.分类:EnterpriseJavaBeans+---EntityBeans--CMP/BMPEjb--|+---SessionBeans--Stateful/Stateless会话Bean(SessionBean):根据EJB规范,一个会话Bean是:代表单个客户端来执行可以参与到事务处理中不直接代表共享于数据库中的数据,但它能访问和更新这些数据相对而言是短暂存在的当EJB容器失效后就不存在---客户端需要重新建立一个信新的会话对象来继续运算实体Bean(EntityBean):根据EJB规范,一个实体Bean是:提供在数据库中数据的对象视图允许被多个用户共享存取访问可以是长期存在(只要它存在于数据库中)实体Bean,它的主键对象,以及它的远程引用将能跨EJB容器的宕机而存在11.EJB类和实例构建EJB应用包括来自三方的代码开发人员编写的代码由EJBAPI定义的类和接口由容器自动生成的代码开发人员编写的代码包括Bean类(定义了业务逻辑)Home接口(如何查找或创建bean)Remote接口(如何存取bean)其它组件,根据bean实际要求12.EJBHome接口每个bean有一个用于:创建新的bean实例、查找现存的bean(只能是实体bean)Remote接口:定义bean的公共接口---只有在Remote接口中定义的方法才能被客户端访问EJB客户端可以为servlet,JSP,应用程序或其它bean通过JNDI来查找EJBhome接口,步骤为:创建一个JNDIContext(initialcontext)使用JNDIContext来查找beanhome接口使用beanhome接口来创建/查找bean实例使用bean实例完成业务操作实际的存取(对EJB)是通过容器生成的类来完成EJB架构客户端对bean访问永远不是直接的EJBObject(tie)是由容器自身提供的:用来帮助管理bean的生命周期EJB中的角色EJB服务器供应商:开发并销售EJB服务器EJB容器供应商:开发并销售EJB容器Enterprisebean开发人员:开发并销售EJB应用组装人员:将不同的EJB搭建成应用六、EJB的体系结构目前,EJB最新的标准是2.1,EJB3.0规范正在讨论中,预计将于明年推出。EJB2.1定义了三种企业Bean,分别是会话Bean(SessionBean),实体Bean(EntityBean)和消息驱动Bean(MessageDrivenBean)。SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问。EntityBean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于新建一条记录,删除一个EntityBean会同时从数据库中删除对应记录,修改一个EntityBean时,容器会自动将EntityBean的状态和数据库同步。MessageDrivenBean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态SessionBean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。调用一个EJB组件要比调用一个JavaBean麻烦些,由于EJB组件可以分布在多台服务器上,因此必须首先获得远程或本地Home接口,然后使用Home接口创建EJB之后就可以调用EJB的方法了。七、EJB设计模式常见EJB设计模式SESsionFacadepattern通常项目中,客户端往往需要频繁的对服务器端数据进行操作。当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作(如下图1)。这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差、性能因此有必要在客户端与实体EJB层间加入SessionEJB层,在SessinoEJB中实现商业逻辑并封装对实体EJB的操作。(如下图2)图1:客户端直接与实体EJB交互图2:通过SessionEJB层实现SessionFacade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。SessionFacade模式因其简单使用,是目前使用很广的模式。但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在JavaClass内)。MesSAgeFacadePattern很多时候,一次RequeST需要操作多个EJB又不需要得到即时返回。对这种异步调用,通常应用MessageFa?adePattern.这种时候,如采用SessionFa?adePattern存在如下问题:1.客户端等待返回的时间过长。一个SessionEjb的实例在完成客户请求过程中中涉及到的每一次对其他实体Ejb的调用过程中都会被锁定直到得到实体EJB返回信息后才能进行下一步操作。这样造成客户不必要的等待,并很容易因时间导致整个事务失败。2.系统可靠性和容错性低。如果需要调用不同系统或服务器上或多个异构数据源的多个EJB时,任何一个环节出错,均导致客户请求失败。以Message-DrivenBean为基础的MessageFacadePattern则可以解决上述异步请求需求。具体架构见下图3图3:使用MessageFacadePatternMessageFacadePattern的不足之处在于:1.Message-DrivenBean没有返回值。这样通知客户执行结果只能依赖于EmAIl或人工等其他手段。2.Message-DrivenBean执行过程中无法将捕获的异常直接返回给客户端,即无法使客户端直接直到错误信息。3.Message-DrivenBean通过接收Message响应客户请求,对Message内容的合法性(比如对象的类型等)依赖与客户端.容易产生运行时错误。MessageFacadePattern经常与SessionFacadePattern在同一个项目里共同使用。EJBCommandPatternSessionFacadePattern中将商业逻辑实现封装在SessionEJB中,这种做法带来诸多益处之外也带来如下问题:1.由于业务经常的变化,导致经常需要更新SessionEJB代码。2.客户端代码不得不包含大量EJB相关的API,不利于后期项目维护。3.项目开发测试需要经常
本文标题:JAVA工程师EJB面试题集
链接地址:https://www.777doc.com/doc-2878662 .html