常见的EJB设计模式概述
Appendix
应用程序 专业领域框架 一般性应用框架 支持性框架 作业系统 应用框架
优秀框架所必须具备的
开放性:一个框架不能对开发者限制太多,也不能将开
发者封装在一个黑盒子中,应该可以让开发者越过该框架 操作该框架力不能及的功能。 操作该框架力不能及的功能
本文由silverflame1贡献
pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
Advanced Java Programming
J2EE Patterns
特点
与平台、语言相关,描述的是J2EE平台上利用 Java如何解决设计问题 所解决问题的规模较大,在J2EE框架的基础上 解决构件技术的选择、构件之间的协作等问题 模式抽象层次较高,同时提供了若干具体实现 的细节,称为策略。 的细节 称为策略 注重性能的优化
EJB Home Factory, Business Delegate
MVC模式介绍
模型-视图-控制器(Model-View-Controller, MVC)模式是为那些需要为同样的数据提供多个视 图的应用程序而设计的。它很好地实现了数据层 与表示层的分离,特别适用于开发与用户图形界 与表示层的分离 特别适用于开发与用户图形界 面有关的应用程序。 模式中基本结构定义为: 模式中基本结构定义为
Web层模式:JSP,Servlet 层模式 ,
Intercepting Filter, Front Controller, View Helper…
业务层模式:EJB
Business Delegate, Value Object, Session Fa?ade…
MVC的不足
Struts、Spring、Hibernate三大框架的原理和优点
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
JEE系统架构图及其简介
各种系统架构图及其简介(Spring+IBatis+Struts1+Struts2+Hibernate+JavaEE+Oracle)1.Spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。
Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。
核心容器的主要组件是BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring 框架中。
所以,可以很容易地使Spring框架管理的任何对象支持AOP。
Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
中国电信笔试行测题【精选】
选择题1:一家珠宝店的珠宝被盗,经查可以肯定是甲\乙\丙\丁的某一人所为,审讯中,甲说:偶不是罪犯.乙说:丁是罪犯.丙说:乙是罪犯.丁说:偶不是罪犯.胫骨调查证实四个人中只有一个说的是真话.请根据已知条件判断:A.甲说的是假话,甲是罪犯B.乙说的真话,丁是罪犯C.丙说的真话,乙是罪犯D.丁说的是假话,丁是罪犯2:体内不产生P450物质的人与产生P450物质的人比较,前者患帕金森式综合症(一种影响脑部的疾病)的可能性三倍于后者。
因为P450物质可保护脑部组织不受有毒化学物质的侵害。
因此,有毒化学物质可能导致帕金森式综合症。
下列哪项,如果为真, 将最有力地支持以上论证?A.除了保护脑部不受有毒化学物质的侵害,P450对脑部无其它作用。
B.体内不能产生P450物质的人,也缺乏产生某些其它物质的能力。
C.一些帕金森式综合症病人有自然产生P450的能力。
D.当用多已胺——一种脑部自然产生的化学物质治疗帕金森式综合症病人时,病人的症状减轻。
3:因为青少年缺乏基本的驾驶技巧,特别是缺乏紧急情况的应对能力,所以必须给青少年的驾驶执照附加限制。
在这点上,应当吸取H 国的教训。
在H 国,法律规定 16岁以上就可申请驾驶执照。
尽管在该国注册的司机中19岁以下的只占7%,但他们却是20%的造成死亡的交通事故的肇事者。
以下各项有关H 国的断定如果为真,都能削弱上述议论,除了A.与其他人相比,青少年开的车较旧,性能也较差。
B.青少年开车时载客的人数比其他司机要多。
C.青少年开车的年均公里(即每年平均行驶的公里数)要高于其他司机。
D.和其他司机相比,青少年较不习惯系安全带。
4:一条街上,一个骑车人和一个步行人相向而行,骑车人的速度是步行人的3倍,每个隔10分钟有一辆公交车超过一个行人。
每个隔20分钟有一辆公交车超过一个骑车人,如果公交车从始发站每隔相同的时间发一辆车,那么间隔几分钟发一辆公交车?A.10B.8C.611 016285:数字推理:16 , 8 , 8 , 12 , 24 , 60 , ______A.90B.120C.180D.2406:血液中的高浓度脂肪蛋白含量的增多,会增加人体阻止吸收过多的胆固醇的能力,从而降低血液中的胆固醇。
J2EE技术概述
Huihoo - Enterprise Open Source
16
实体bean(Entity Bean)
定义:对于客户机,实体 enterprise bean 是一种持久性对象,它 代表一个存储在持久性存储器(例如,一个数据库)中的实体的 对象视图,或者是一个由现有企业应用程序实现的实体。 简单的讲实体bean 代表了一种数据集,可以访问这些数据集来满
Huihoo - Enterprise Open Source
10
JSP Custom tags
1.ห้องสมุดไป่ตู้
2.
标记库包含一个标记库描述符(TLD)和用于实现Custom tag 的Java类 在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是 否都被正确的使用。 标记处理程序只是一个简单的适配器,而真正的逻辑是在另一 个类中实现的,标记处理程序只是提供了一个供其他的可复用 的类的JSP接口 用法: <%@ taglib prefix="huihoo" uri="/huihoo.tld" %> JAKARTA的I18N标记库
/java/jsp/tablibs.zip
3.
4. 5.
Huihoo - Enterprise Open Source
11
Servlet
1.ServletConfig 一个ServletConfig对象是servlet container在servlet initialization的时 候传 递给servlet的 2.会话跟踪 1) Session (推荐使用) 2) cookie 3) URL Rewriting 3.SingleThreadModel Servlet specification上建议,不要使用synchronized, 而使用SingleThreadModel。
J2EE EJB入门
J2EE EJB入门一、状态(Session)EJB的应用1、状态EJB的分类状态EJB分为非会话状态EJB和会话状态两种(1)非会话状态EJB,不保存用户状态,不为用户建立独立的线程.(2)会话状态EJB,保存用户状态,为用户建立独立的线程.会话状态EJB与非会话状态EJB的互相转换很简单,在Jbuilder的EJB设计器中将Session Type设为Stateless或者Stateful便可.2、状态EJB的生命周期(1)非会话状态EJB的生命周期当客户端访问非会话状态EJB时,非会话状态EJB的setSessionContext()方法和ejbCreate()方法被激活,然后非会话状态EJB保留在EJB容器内,等待用户的访问。
EJB一但被用户创建便保留在服务器内,它的生命周期一直到服务器发出关闭指令才结束。
(2)会话状态EJB生命周期当一个客户端的程序EJB时,EJB的生命开始,SetSessionContex方法和ejbjCreate方法被激活,会话状态EJB的方法可以被事务处理方法和非事务处理方法访问,当客户端结束运行时,该EJB也结束运行。
会话状态EJB比非会话状态EJB多了一个状态,EJB可以处在不激活状态,并且会话状态EJB使用ejbPassivate方法和ejbActivate方法3、两种状态EJB的比较非会话状态EJB不会为客户创建独立的进程,它一旦创建便保留在服务器内,每个客户都是使用一个EJB对象;会话状态EJB为客户创建独立的进程,每个客户使用不同的EJB对象,需要使用remove方法删除服务器上的EJB对象.在实际项目中利用不同状态EJB实现不同的效果,如电子商城的公布板的信息对每个用户都是相同的,可以使用非会话状态EJB;如电子商城的购物车对每个用户是不同的,可以使用会话状态EJB。
我们也可以将一些耗时的处理过程放入非会话状态EJB共享。
二、全局(Entity)EJB的应用1、全居EJB的作用(1)可以和数据库的数据结合操作,全局EJB提供各种数据操作的方法。
J2EE简介
JTA(Java Transaction API)提供了J2EE中处理事务的标准接口,它支持事务的开始、回滚和提交。同时在一般的J2EE平台上,总提供一个JTS(Java Transaction Service)作为标准的事务处理服务,开发人员可以使用JTA来使用JTS。
· JCA
◆ EJB容器 服务器端容器,包含的组件为EJB(Enterprise JavaBeans),它是J2EE的核心之一,主要用于服务器端的商业逻辑的实现。EJB规范定义了一个开发和部署分布式商业逻辑的框架,以简化企业级应用的开发,使其较容易地具备可伸缩性、可移植性、分布式事务处理、多用户和安全性等。
J2EE主由升阳(SUN)与IBM等厂商协同业界共同拟定而成的技术规范,以企业与企业之间的运算为导向的JAVA开发环境。J2EE架构定义各类不同组件,如Web Component、EJB Component…等,而各类组件可以再用(reuse),让已开发完成的组件,或者是经由市面采购而得的组件,均能进一步组装成不同的系统。
j2ee
J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition)
J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼,导致企业内部或外部难以互通的窘境。
在J2EE的各种服务和API中,JDBC和JCA用于企业资源(各种企业信息系统和数据库等)的连接,JAX-RPC、JAXR和SAAJ则是实现Web Services和Web Services连接的基本支持。
EJB教程
服务框架 EJB并不是一个产品。
它是Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。
应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。
EJB规范详细地解释了一些最小但是必须的服务,如事务,安全和名字等。
软件厂商根据这些规范要求以保证一个enterprise bean能使用某个必需的服务。
规范并没有说明厂商如何实现这些服务。
这使得通过阅读规范来学习EJB更加困难,因为它允许厂商在不牺牲核心服务的可移植性的前提下来提供一些增强功能。
JavaBeans和Enterprise JavaBeans JavaBeans是Java的组件模型。
在JavaBeans规范中定义了事件和属性等特征。
Enterprise JavaBeans也定义了一个Java组件模型,但是Enterprise JavaBeans组件模型和JavaBeans组件模型是不同的。
JavaBeans重点是允许开发者在开发工具中可视化的操纵组件。
JavaBeans规范详细地解释了组件间事件登记、传递、识别和属性使用、定制和持久化的应用编程接口和语意。
Enterprise JavaBeans的侧重点是详细地定义了一个可以portably地部署Java组件的服务框架模型。
因此,其中并没提及事件,因为enterprise bean通常不发送和接受事件。
同样也没有提及属性------属性定制并不是在开发时进行,而是在运行时(实际上在部署时)通过一个部署描述符来描述。
不要寻找JavaBeans和Enterprise JavaBeans之间的相似性。
他们都是组件模型规范,但是前者说明了开发工具中应用程序组装的问题,而后者则侧重于部署组件的服务框架的细节。
不要错误地认为JavaBeans是用于客户端的开发,Enterprise JavaBeans是用于服务器端的开发。
JavaBeans也可作为进行非图形化服务器端Java应用开发的组件模型。
EJB面试题
94、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS.....95、EJB与JAVA BEAN的区别? 答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。96、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。?答:EJB包括Session?Bean、Entity?Bean、Message?Driven?Bean,基于JNDI、RMI、JAT等技术实现。SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。Session?Bean?还可以再细分为?Stateful?Session?Bean?与?Stateless?Session?Bean?,这两种的?Session?Bean都可以将系统逻辑放在?method之中执行,不同的是?Stateful?Session?Bean?可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的?Stateful?Session?Bean?的实体。Stateless?Session?Bean?虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫?Stateless?Session?Bean?的时候,EJB?Container?并不会找寻特定的?Stateless?Session?Bean?的实体来执行这个?method。换言之,很可能数个使用者在执行某个?Stateless?Session?Bean?的?methods?时,会是同一个?Bean?的?Instance?在执行。从内存方面来看,?Stateful?Session?Bean?与?Stateless?Session?Bean?比较,?Stateful?Session?Bean?会消耗?J2EE?Server?较多的内存,然而?Stateful?Session?Bean?的优势却在于他可以维持使用者的状态。97、EJB与JAVA?BEAN的区别?答:Java?Bean?是可复用的组件,对Java?Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java?Bean是被容器所创建(如Tomcat)的,所以Java?Bean应具有一个无参的构造器,另外,通常Java?Bean还要实现Serializable接口用于实现Bean的持久性。Java?Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise?Java?Bean?相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?SessionBean:Stateless?Session?Bean?的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful?Session?Bean?时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful?Session?Bean?的方法时容器会把调用分派到与此客户机相关联的Bean实例。EntityBean:Entity?Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity?beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity?beans也是存活的。Entity?Beans生命周期能够被容器或者?Beans自己管理。EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun?Microsystems的Transaction?Service(JTS)、Java?Transaction?API(JTA),开发组(X/Open)的XA接口。98、EJB的角色和三个对象答:一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise?Bean?Provider)?、应用组合者(Application?Assembler)、部署者(Deployer)、EJB?服务器提供者(EJB?Server?Provider)、EJB?容器提供者(EJB?Container?Provider)、系统管理员(System?Administrator)三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类99、EJB容器提供的服务答:主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。100、EJB规范规定EJB中禁止的操作有哪些???答:1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),2.不能操作awt,3.不能实现服务器功能,4.不能对静态属生存取,5.不能使用IO操作直接存取文件系统,6.不能加载本地库.,7.不能将this作为变量和返回,8.不能循环调用。101、remote接口和home接口主要作用答:remote接口定义了业务方法,用于EJB客户端调用业务方法。home接口是EJB工厂用于创建和移除查找EJB实例102、bean?实例的生命周期答:对于Stateless?Session?Bean、Entity?Bean、Message?Driven?Bean一般存在缓冲池管理,而对于Entity?Bean和Statefull?Session?Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB?Object(create)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。103、EJB的激活机制答:以Stateful?Session?Bean?为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB?Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。104、EJB的几种类型答:会话(Session)Bean?,实体(Entity)Bean?消息驱动的(Message?Driven)Bean会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种105、客服端调用EJB对象的几个基本步骤答:设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。
EJB概述
EJBEJB(Enterprise Java Bean,企业Bean),是基于Java的服务器端组件架构技术。
借助于EJB,开发者能够轻松的构件企业级的、分布式组件应用。
与此同时,在不用自身开发复杂分布式组件框架的前提下,开发者能够开发架构灵活、运行可靠及安全的应用系统。
对于服务器端开发而言,EJB引入了快速应用开发(Rapid Application Development,RAD)模型。
因此,在Java应用服务器提供商提供的肯定不是基础框架(比如,J2EE应用服务器)的基础之上,开发者能够快速、轻松地构建服务器端组件。
EJB的重要设计初衷是保证应用能够在任意提供商开发的企业中间件服务上畅行无阻,而且其便携性、可重用性都是一流的【1】。
背景简单地讲,EJB就是组件,何谓组件?1966年,面向组件编程(ECOOP)的欧洲工作组提出了以下定义:“软件组件是一个具有契约式特定接口和显示语境从属的组成单元。
软件组件能被独立地部署并从属于第三方的组成。
”从定义中能看出三个很重要的特性:●特定接口●显示从属●部署能力软件组件:宿主于普林斯顿大学的在线服务(/perl/webwn)将组件(component)定义的非常简单:事物的抽象部分(an abstract part of something)。
软件组件是组件的具体化过程,它是事物的具体部分。
软件组件是由程序代码构成的,它将抽象概念的行为进行具体化。
通常,我们能够在现实生活中找到这些抽象概念对应的真实基础。
比如,MortgageDebt组件能够将现实生活中实际发生的抵押贷款过程展示清楚,而且它还会讲涉及到的人、公司等信息也描述出来。
当然,组件与对象是两种不同的事物,它们存活于独立空间。
下面给出他们间的差异性。
组件是非常独立的实体。
只要真正掌握了组件的具体语义,开发者才能够在类似应用或完全不同的应用中重用它们。
通常,组件本身都含有运行自身所需的各类文件,因此它们能够独立于具体应用,而且能够在不同场合重用它们。
ejb和和框架
EJB1:EJB:答: Enterprise Java Bean 相当于DCOM,即分布式组件。
它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。
但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。
客户通过容器来访问真正的EJB组件。
答:Enterprise java bean 容器。
更具有行业领域特色。
他提供给运行在其中的组件EJB各种管理功能。
只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。
并且可以通过现成的接口来获得系统级别的服务。
例如邮件服务、事务管理。
RMI:(Remote Method Invocation)远程方法调用答:RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。
其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应用于分布式对象系统。
而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
2:EJB种类、作用答:Entity Bean——用于描述一个永久的对象。
Session Bean——描述任务或者工作流的模型,并且协调Bean之间的交互。
Message-Driver Bean——用在基于J2EE应用程序中处理异步JMS消息。
3:实体bean,CMP,BMP写法区别?答:CMP entity bean不需要在bean中编写数据库操作的代码;可以让容器做这件事。
j2ee体系介绍
J2EE体系介绍一、J2EE定义J2EE(Java 2 Platform, Enterprise Edition)是Java技术的一个扩展,它为构建企业级应用程序提供了一套完整的开发框架。
这个框架为应用程序的开发、部署和管理提供了丰富的服务,使开发人员能够更快速、更有效地构建企业级应用程序。
J2EE的出现,使得基于Java技术的企业级应用程序的开发更加标准化和规范化。
二、J2EE组件J2EE组件是构成企业级应用程序的基本单元,它们可以一起工作,为企业级应用程序提供强大的功能。
以下是一些主要的J2EE组件:1.应用程序客户端组件:这些组件是运行在客户端机器上的Java应用程序,它们通常用于与服务器交互以获取或提交数据。
2.Web组件:Web组件包括Java Server Pages (JSP) 和Servlet,它们用于创建动态Web内容。
3.EJB(Enterprise JavaBeans)组件:EJB是运行在J2EE服务器上的Java对象,它们代表了企业级应用程序的核心业务逻辑。
EJB可以分为Session Beans、Message-driven Beans和Entity Beans。
4.消息传递组件:这些组件用于实现异步通信,使应用程序能够处理基于消息的通信协议,如Java Message Service (JMS)。
5.事务管理组件:这些组件用于管理事务,确保数据的完整性和一致性。
6.安全和认证组件:这些组件用于提供安全性和认证功能,保护应用程序免受恶意攻击和数据泄露。
7.管理和监视组件:这些组件用于监视和管理应用程序的性能和安全性。
三、J2EE服务J2EE提供了以下服务来支持企业级应用程序的开发和部署:1.事务管理服务:事务管理服务确保数据的一致性和完整性。
在J2EE中,可以使用分布式事务管理服务来控制和管理分布式事务。
2.安全服务:J2EE提供了安全服务,以确保应用程序的安全性。
这些服务包括用户身份验证、授权和访问控制等功能。
二十三种设计模式
B. 结构模式 设计模式之 Adapter(适配器) 使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java 中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC 针对不同的数据库编程,Facade 提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和单位做买卖。文章中还对 Jive 再进行了剖析。 设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式之 Flyweight(共享元) 提供 Java 运行性能,降低小而大量重复的类的开销.
可以这么说:GoF 设计模式是程序员真正掌握面向对象核心思想的必修课。虽然你可能已经通过了 SUN 的很多令人炫目的 技术认证,但是如果你没有学习掌握 GoF 设计模式,只能说明你还是一个技工。
在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本 Java 基础语言书籍?但又不纯粹是,因为这本书的作 者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。
C. 行为模式 设计模式之 Command(命令) 什么是将行为封装,Command 是最好的说明. 设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式之 Iterator(迭代器) 这个模式已经被整合入 Java 的 Collection.在大多数场合下无需自己制造一个 Iterator,只要将对象装入 Collection 中, 直接使用 Iterator 进行对象对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌握,那么你就需要研读 GoF 的《设 计模式》了。
EJB实现机制的软件设计模式研究
S f a e De i a t r s o t r sgn P te n w
李 晓华 ( 河北 省城 乡规划设计研 究院 石家庄 0 0 2 ) 5 0 1
摘要 : 软件设 计模 式的 角度研 究 了 EB的设计与 实现机 制。其 中, 从 J 用代理设计模 式、 适配 器设计模 式、 工厂设计
维普资讯
计 算 机 系 统 应 用
20 年 第 8 期 06
E J B实现 机 制 的软件 设 计 模 式研 究
R s a c i g t e I p e e tM e h n s o J ih e e r h n h m l m n c a im fE B w t
1 引言
设计模式是人们在软件开发过程 中积 累的软件设 计经验 , 一种 软件设计 经验是 有关某一 类软件设 计 问 题 的通 用解决方 案 ,此解决 方案可 能是 类、 间关 系 类 的具体定义 , 也可能是一种软件设 计思想 的抽 象描述。
2 R 的软件设计模式研究 MI
ttU se' ,
被调 用的 EB对象 的本地代理。 J ( )建 立与远 程 EB对象 的握手 2 J 连接。
璺 粤
国 … … …
图 1 FB的 R 的 U 类 分析 图 I MI ML
( )序列 化要 传送 到远 程 EB服 3 J 务器的客户端数 据和 反序 列化从 远程 EB 务 器传 送 到客 户端 的数 据。序 J服 列化 的含义就 是把要 传送 的数据编码 成适 于 在 网上传 输 的 网络 字节 流 , 如 果要 传 送 的数据 是 对 象 , 则是 只传 原 对象属 性 , 不传 对 象 方 法。如 果 对 象
设计模 式 的最大特 点是支持 复用 , 计模式经 常被 用 设 于构件 的设计 与实现 , 即用设计模 式所体现 的软件设
《设计模式》PPT课件
精选课件ppt
8 20.07.2021
J2EE应用程序场景
Multitier Application Scenario
Stand-Alone Client Scenario
Web-Centric Application Scenario
Business-toBusiness Scenario
精选课件ppt
9 20.07.2021
J2EE应用程序场景
Multitier Application Scenario
Stand-Alone Client Scenario
Web-Centric Application Scenario
Bean Class
Client
精选课件ppt
Local LocalHome
Bean Class
为创建 EJB 服务器端 组件,Enterprise Bean 开发人员提供了 两个定义 bean 商业方 法的公共接口—— Remote接口和Home 接口(或者Local接口 和LocalHome接口) ,以及真正的 bean 实 现类——Bean Class 。
两个接口中都要定义 bean的商业方法。
21 20.07.2021
EJB的构成-类图
精选课件ppt
22 20.07.2021
EJB的构成-部署描述符
ejb-jar.xml
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" " /dtd/ejb-jar_2_0.dtd"> <ejb-jar>
ejb技术
5
EJB架构图二
Huihoo - Enterprise Open Source
6
Client与EJB容器的交互过程
Huihoo - Enterprise Open Source
特性: 容器管理持久性过程包含三项操作:映射、部署和运行。
Huihoo - Enterprise Open Source
14
JDO(Java Data Object)
它具有所有必须的数据存储功能:增、删、改、事务、数据唯一 性、缓冲 JDO APIs (PersistenceManager, Query, Transaction) JDO提供了一个称为JDOQL的查询语言 JDO可以支持在异种数据源中非常复杂的映射机制,然而, EJB/CMP模型仅适用于简单的JDBC模型。 使用JDO你没有业务对象的复杂性的限制(然而EJB/CMP不支持 继承)。 使用JDO在你的业务数据对象中完全没有数据库代码(然而使用 EJB/BMP 你的业务代码会掺杂入JDBC代码) JDBC只是面向关系数据库(RDBMS),而JDO更通用,提供到 任何数据底层的存储功能,比如关系数据库、文件、XML以及对象 数据库(ODBMS)等等,使得应用可移植性更强。
优点:
开发者有完全的控制 无需复杂的提供商支持
缺点:
编码复杂 在改变时需要重新编码和部署 影响可移植性
Container-Managed Persistence(容器管理的持久性)
优点:
提供商解决,可能会有更好的缓冲和性能 在部署描述符中进行改变即可 可移植性好
缺点:
对容器提供商的工具依赖性强 可能不易反映复杂的数据关系
Huihoo - Enterprise Open Source
EJB集群技术分析
EJB集群技术分析J2EE平台提供了一个基于组件的方法,用来设计、开发、装配及部署企业应用程序。
而且提供了一个多层的分布式的应用模型、组件的复用、一致化的安全模型以及灵活的事务控制模型。
近年来在企业系统中得到了大量使用。
随着J2EE 应用服务器的大量部署和客户访问量的猛增。
企业对于J2EE系统的可伸缩性和高可用性要求越来越高,特别是在电子商务和金融领域,这个问题越显的突出。
如何设计和构建一个具有可伸缩的,高可用性的J2EE集群应用服务器,成为设计J2EE应用服务器设计必须考虑的问题。
但J2EE应用服务器的集群是基于EJB 组件的集群,和普通Web Server集群技术有很大的不同。
实现的方法也根本不相同。
1 集群系统特点一个集群系统是一群松散结合的服务器组,形成一个虚拟的服务器,为客户端用户提供统一的服务。
对于这个客户端来说,通常在访问集群系统时不会意识到它的服务是由具体的哪一台服务器提供。
集群系统一般应具高可用性、可伸缩性、负载均衡、故障恢复和可维护性等特殊性能。
高可用性是集群系统最基本的要求,它是对整个系统运行稳定性的一个评价。
可伸缩性是指整个系统在随着客户端用户数量的增加而继续保持有效响应时间的能力。
在一个可伸缩性系统中,随着用户数量的增加,有效响应时间变长,成线性变化关系,这也体现一个系统的峰值负载处理能力,但随着越来越多的系统处于Internet上,用户访问的峰值负载有效预测已变的不可能。
用户访问量的猛增,使系统的有效响应时间成非线性变化,响应时间急剧变长,知道系统不堪重负而停机。
一般的解决方法就是通过提升系统硬件系统,或通过增加服务器。
但是不合理的增加服务器只能使整个集群系统变的越来越庞大,系统的这种复杂化就意味系统故障率变高,随之整个系统可靠性、可维护性都会降低。
所以,一个系统的可用性和可伸缩性是一对矛盾的关系,而且和整个集群系统的实现方法有很大的关系。
2 EJB技术EJB是J2EE应用平台的核心。
EJB性能优化设计方案
正3 3
・
计
算
机
工
程
20 0 7年 l 1月
No e be 00 vm r2 7
No.2 2
Co p t rEn i e rn m u e gn eig
软件 技 术 与数据库 ・
文章 编号: 00 48 07 2-11 0 10 ̄32( 0) -0 - 3 文献标识码:A 2 2 0-
fc r, au bet dohrEB ds np t rstep prcme pwi eo t zt nsh mefr J einp t rs T i shmehs at y V leO jc a te J ei atn ,h a e o su t t pi ai ce o B ds at n. s c e a o n g e hh mi o E g e h
S Li ・e g GUO n c e g U n f n , Ge - h n
( lg f lc o i Ifr t nE gn e n , n nUnv rt f cec n eh oo y L o ag4 10 ) Col e et nc nomai n ier g Hea ies yo in e dT c n lg , u y 7 0 3 e oE r o i i S a n
作 为 JE 的核 心 技 术 之 一 , J 的 优 点 是让 开发 人 员 把 2E EB
辑根据功能被划分成组 件。 J E B属于运行在 JE 2 E服务器 上的 业务层组件 ,它用于解决或满足特定业务领域问题 的逻辑 。 根据不 同功能或逻辑需 要,把 E B分为会话 ba , J en 实体 ba en 和消息驱动 ba e n3种。在 JE 2 E项 目中 E B用来接收客户端 J
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EJB设计模式概述一.设计模式重要性采用EJB技术的J2EE项目中,EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。
项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。
二.常见EJB设计模式Session Facade Pattern通常项目中,客户端往往需要频繁的对服务器端数据进行操作。
当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作(如下图1)。
这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差、性能因此有必要在客户端与实体EJB层间加入SessionEJB层,在Sessino EJB中实现商业逻辑并封装对实体EJB的操作。
(如下图2)图1:客户端直接与实体EJB交互图2:通过SessionEJB层实现Session Facade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。
Session Facade模式因其简单使用,是目前使用很广的模式。
但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在Java Class内)。
Message Facade Pattern很多时候,一次Request需要操作多个EJB又不需要得到即时返回。
对这种异步调用,通常应用Message Facade Pattern.这种时候,如采用Session Facade Pattern存在如下问题:1. 客户端等待返回的时间过长。
一个SessionEjb的实例在完成客户请求过程中中涉及到的每一次对其他实体Ejb的调用过程中都会被锁定直到得到实体EJB返回信息后才能进行下一步操作。
这样造成客户不必要的等待,并很容易因时间导致整个事务失败。
2. 系统可靠性和容错性低。
如果需要调用不同系统或服务器上或多个异构数据源的多个EJB时,任何一个环节出错,均导致客户请求失败。
以Message-Driven Bean为基础的Message Facade Pattern则可以解决上述异步请求需求。
具体架构见下图3图3:使用Message Facade PatternMessage Facade Pattern的不足之处在于:1.Message-Driven Bean没有返回值。
这样通知客户执行结果只能依赖于Email或人工等其他手段。
2.Message-Driven Bean执行过程中无法将捕获的异常直接返回给客户端,即无法使客户端直接直到错误信息。
3.Message-Driven Bean通过接收Message响应客户请求,对Message内容的合法性(比如对象的类型等)依赖与客户端.容易产生运行时错误。
Message Facade Pattern经常与Session Facade Pattern在同一个项目里共同使用。
ServiceLocatorServiceLocator直译过来是”服务定位器”, 其实准确一些来讲, 更多的使用于EJB组件的定位器, 它封装lookup JNDI的逻辑, 处理在定位服务时抛出的一些系统级异常. Lookup JNDI 是我们在EJB开发中频繁遇到的操作, 繁琐的代码给开发以及维护带来困难, 并且, 频繁的lookup 也会加大性能上的开销.ServiceLocator封装了Client与EJB之间的调用逻辑, 可以缓存EJBHome接口, 简化了Client端的代码, 并且降低了lookup EJBHome接口带来的性能开销.ServiceLocator可分为两类, 一类返回客户端的为EJBHome接口, 另一类为EJBObject接口(只适用于无状态的SessionBean). 返回的EJBHome接口, 客户端一般需要调用ejbCreate()方法来创建Bean的实例, 而返回的EJBObject接口则可以直接使用. 一般第二类ServiceLocator可考虑使用java的反射技术或者枚举法来实现.下图为返回EJBHome接口的ServiceLocator模式的实现EJB Command PatternSession Facade Pattern中将商业逻辑实现封装在Session EJB中,这种做法带来诸多益处之外也带来如下问题:1.由于业务经常的变化,导致经常需要更新Session EJB代码。
2.客户端代码不得不包含大量EJB相关的API,不利于后期项目维护。
3.项目开发测试需要经常的EJB重部署过程。
引起上述问题的重要根结就是Session EJB本身重量级组件,其开发测试部署工作量较大,开发周期较长。
以上不足可以通过EJB Command Pattern克服。
EJB Command Pattern中将商业逻辑实现封装在普通的Java Class(称之为Command Bean)中。
该模式的具体实现有很多种,通常的框架都包括三部分:1.Command Bean.由应用开发者写的具体实现某商业操作的Java Class.主要包含getXXX(),setXXX(),execute()方法。
2.Client-Side Routing Logic.由多个Class组成,用于将请求转发至Command Sever,这个过程对客户是透明的。
这部分代码可以跨项目使用。
路由规则中可以考虑用XML技术。
3.Remote Command Server.实际执行商业操作请求。
通常可以用Session EJB层实现。
整个框架见下图4:图4:Command的基本框架EJB Command Pattern具有如下好处:1.适应与需要快速开发环境。
因Command Bean是轻量级的Java Class,其编译和调试比较方便。
2.将表现层与商业实现层隔离,同时将客户端代码与EJB层隔离。
3.将客户端代码开发与服务器端代码开发相对清晰。
早期可以创建空的Command Bean 方便客户端代码调试。
EJB Command Pattern的弱处在于:1.Command Bean中对事务的控制不如Session EJB中。
2.Command Bean是无状态的。
3.无法将异常直接返回给客户。
4.在大项目中,由于商业逻辑复杂,常导致大数量的Command Bean存在.5.作为Command Server的Session EJB打包时必须包含Command Bean以致存在维护上的不便。
EJB Command Pattern的一个实际实现可以参考IBM's Command Framework.Data Access Command BeanJDBC for Reading Pattern中提到了将数据库的存取逻辑放在SessionBean中, 直接使用JDBC 处理CMP不能胜任的复杂的数据库任务. 这样做的缺点是1业务逻辑与数据库的存取逻辑混杂在一起,形成了紧密耦合。
加大了测试的难度,降低了维护性。
2数据库类型绑定3不稳定的,尤其当数据模型发生改变时。
4重复的逻辑-取得数据源,获得连接,prepareStatement, 处理结果集,关闭Statement,关闭连接。
DACB可以帮助我们分离使用JDBC带来的业务与数据存取逻辑的耦合,DACB ( Data Access Command Bean ) 是普通的JavaBean, 它封装了数据存取逻辑,Bean的实现方式类似于EJB Command Pattern, 通常是由set, get, execute组成,如果返回多条数据可有next方法。
使用DACB的好处:1分离了业务逻辑与数据库存取逻辑2虚拟了一个Persistent Layer3数据源独立,数据库的类型对于Client是透明的。
不足:1额外增加了一个对象层:我们必须写一个CommandBean来分离业务与数据存取逻辑。
2对于JDBC的高级特性难以支持:例如批量修改。
Data Transfer Object Factory基于EJB的J2EE项目,经常需要在客户端与服务器端传输大量数据。
数据的组织形式常用的是DTO(Data Transfer Object,服务器端数据对象的抽象)。
但因为客户端表现层经常是变化的,所需要服务器端数据也变动频繁,换句话说,DTO的数量和属性经常要更改。
因此如何以及在何处生成和维护DTO便是需要考虑的问题。
一种解决方案是直接在Entity EJB中直接处理,即在Entity EJB的Bean类中加入getXXXDTO()、setXXXDTO()等。
但这样做导致EJB与DTO层紧紧绑定。
一旦DTO更改,与该DTO相关的EJB即需要重编译打包。
EJB层与客户端层相关联不仅使维护困难而且导致EJB 的重用性大大降低。
更好的解决方案是利用Data Transfer Object Factory封装对DTO的操作逻辑(如下图6)。
图6:DTO Factory示例DTO Factory具体实现方式通常有两种:1.普通Java Class实现,用于Session Facade Pattern使用DTO环境下。
2.Stateless Session EJB实现,用于非EJB客户端使用DTO环境下(见图7)。
图7:SessionEJB实现DTOFactoryDTO Factory带来如下好处:1.使Entity EJB的重用成为可能。
由于不含DTO处理逻辑,Entity EJB功能单一化,只作为数据源。
不通客户端通过各自的DTO Factory可以从同一个Entity EJB得到各自所需的个性化数据(自定义DTO)。
2.提高可维护性和性能。
3.可以根据在DTO Factory层生成很复杂的DTO结构,诸如继承、关联关系等,而对客户端提供一个透明、细化的数据接口。
使用DTO Factory时需要注意的是:不需为每个Entity EJB定义一个Factory。
可以为一系列相关的Entity EJB创建一个Factory,或者只创建一个Factory。
Generic Attribute Access使用Entity EJB作为商业数据层时,我们首先需要从数据库加载数据,创建对应的Entity EJB实例,之后对内存中Entity EJB实例的属性进行相应操作。
对属性的操作比较直接的做法是:直接调用Entity EJB的getXXX()/setXXX(),通常利用EJB2.0的本地接口;通过DTO Factory生成DTO。