目前大多数企业采用J2EE技术的结构设计与解决方案。对于我们学习和研究J2EE体系结构来说,了解与掌握J2EE体系结构的设计方法及一些常用模式是必须的。本文介绍值对象或传输对象,以及截取过滤器。

7、值目标或传输目标

值目标(value object)方式经过削减分布式通讯的音讯而促进数据的交流,一般这儿所指的通讯是在Web层和EJB层之间。在一个长途调用中,一个单一值目标能够被用来取出一系列相关数据并供给应客户。

这种规划方式的出现是依据客户需求与ejb很多地交流数据的状况。具体来说,在J2EE平台中,运用系统一般将服务器端的程序组件完结为会话bean和实体bean,而这些组件的部分办法则需求将数据回来给客户;这种状况下,一般一个用户会重复调用相关办法屡次,直到它得到相关信息,应该留意的是,大都状况这些办法调用的意图都是为了获得单一的信息,例如用户名或许用户地址等。

清楚明晰,在J2EE平台上,这种调用根本上都是来自长途的。也便是说,用户屡次调用相应的办法会给Web带来极大的担负,即便用户和EJB容器加载相同的JVM、OS和核算机上运转EJB程序,因为办法调用被缺省地认为是长途使命,所以这种问题仍然存在。

因为以上所说到的问题,在长途办法的调用次数增加的时分,相关的运用程序性能将会有很大的下降,因此运用屡次办法调用而获得单一的信息是十分低效的;在这种状况,J2EE的研究人员主张运用传输目标来包括一切的程序数据,即每次办法调用能够发送和接纳这个传输目标;当用户向EJB宣布关于程序数据的恳求时,EJB会创立这个传输目标,将它的各个域赋以相关的数值,并将整个目标传送给用户。

当EJB运用传输目标的时分,用户能够经过仅仅一次办法调用来获得整个目标,而不是运用屡次办法调用以得到目标中每个域的数值;因为传输目标是经过值传递而交送给用户的,所以一切关于该传输目标的调用或取值都是本地调用,而不是长途办法调用。不过需求留意的是,这个传输目标有必要具有对应于每个特点的拜访办法,或许将一切特点都设为公共的。

类图13表明晰传输目标方式的系统结构。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第1张

图13 传输目标类图

在图13中,传输目标首先在EJB中创立,然后回来给长途客户;当然,传输目标也能够依据需求交融其他的规划方式。

图14显现了传输目标方式中的参加模块和它们之间的交互。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第2张

图14 传输目标序列图

下面咱们阐明一下传输目标方式的各个参加模块:

(1)客户(Client)。客户代表了EJB所供给服务的运用者,一般是运转于用户终端的运用程序。

(2)事务目标。事务目标表明在一个方式中由会话bean、实体bean或数据拜访目标(Data Access Object)完结的人物。事务目标一般担任创立传输目标,并依据恳求将其传送到相关的用户;事务目标也能够从用户中获得一个传输目标格局的数据,并运用这些数据来履行一些更新。

(3)传输目标。传输目标是一个可序列化的Java目标。在这个目标的类中,一般会有一个包括一切域的结构函数,用来创立这个传输目标。

这个传输目标中的成员变量根本都被界说为公共,然后无需为它们供给相关的拜访办法。当然假如存在必定安全的需求,相关的成员变量也能够设为维护或私有,而且给定各自的拜访办法。由此可见,传输目标的规划是跟着运用系统的需求不同而改动的,是否将目标中的成员变量设为公共,或供给必定的拜访办法,将是一个很重要的规划问题。
一般在完结这个方式时,最多采纳的是可更新的传输目标战略和多传输目标战略。 在可更新的传输目标战略中,传输目标不只能够从服务于用户的事务目标中获得相关信息和数据,还能够从事务目标中得到用户关于数据所需求进行的改动。 图15以类图表的方式表明晰事务目标和传输目标之间的联络。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第3张

图15 可更新传输目标类图

事务目标创立了传输目标。而用户经过拜访事务目标,既得到了所需的信息,也对相关数据做出了必定的修正;为了能够使得用户能够修正事务目标各个域的取值,这个目标有必要供给必定的变值办法,而出于对Web担负的考虑,事务目标所供给的办法***以传输目标为参数。相应地,这些办法能够去调用传输目标所供给的办法,来设置传输目标的各个成员变量的取值;一起在传输目标的办法中,咱们也能够植入数据验证和完整性查看的逻辑,这样在用户从事务目标的办法得到传输目标时,能够直接调用传输目标的成员办法进行本地数据拜访,当然这种本地数据拜访不会影响到事务目标。

当用户调用事务目标的变值办法时,该办法会将用户端的传输目标序列化,再将它发送给事务目标;事务目标接纳到更新的传输目标,便将这些更新写回到自己的目标复制中去; 这儿需求阐明的是,上面说到的写回仅仅涉及到被更新的变量,而不是悉数变量的写回,因此咱们需求在传输目标中另设置一个变量,来指定哪些成员变量被用户更新过,这也就使得这种方式的规划相对杂乱,开发人员需求考虑同步化和版别操控的问题。

图16显现了这个更新进程的序列图。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第4张

图16 可更新传输目标序列图

多传输目标的办法是指一个单一的事务目标能够依据用户恳求制作多个不同的传输目标。也便是说,事务目标和它所创立的传输目标坚持一对多的联络。类图17表明晰这种完结办法的各个参加模块以及它们之间的调用联络。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第5张

图17 多传输目标类图

当一个用户需求A类型的传输目标时,他会激活相关EJB的getDataA()办法来获得传输目标A;当他需求B类型的传输目标时,他会激活getDataB()办法来获取传输目标B;依此类推。序列图18表明晰这一进程。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第6张

图18 多传输目标序列图

运用这种规划方式,运用系统的实体bean及其长途接口会变得十分简略。实体bean中无需再为每一个成员变量都完结一个set()和get()办法,并在长途接口中完结相应的界说。用户无需再进行屡次的办法调用来获得信息和数据,所需求的仅仅一次办法调用以获得整个传输目标。当然这儿需求考虑Web担负和很多数据一次传输的权衡。开发人员能够依据不同的需求来挑选不同的完结办法。

如上所述,用户和实体bean之间能够经过在一次办法调用中运用传输目标而交流一切的数据,也便是说传输目标作为数据载体作业,并削减了长途的办法调用,然后大大减轻了Web担负。经过运用传输目标的办法,咱们也将有或许削减实体bean和其传输目标间的代码重复。不过在运用可更新的传输目标办法时,用户能够修正其本地的传输目标,之后再将其传送回事务目标中,后者将所需的更新整合到自己一端;可是这样一来,就会存在一个版别操控的问题,不同的客户或许在一起修正相同类型的传输目标,而假如相关的事务目标没有发现这一点的话,或许就会形成一些用户的数据没有得到及时更新,而别的一些用户的数据又被掩盖的状况;在系统规划中有必要考虑这个问题。

8、截取过滤器

截取过滤器(intercepting filter)首要用于关于用户恳求的之前处理和之后处理,也便是说它关于客户的恳求运用了额定的操作。比如说,servlet能够处理一个网站的一切客户恳求并供给一个中心的认证机制。

这种方式首要作业于表明层,担任处理不同类型的恳求,一起也需求进行多种不同的处理。在这些恳求中,有一些恳求会直接传送给后端模块处理,而别的一些恳求则先会在过滤器里解说或弥补内容,之后才干传送给后端模块。这种方式的提出首要是因为一个客户的Web拜访和系统呼应都需求必定的预处理和后处理,例如用户身份、用户环境信息、用户恳求的合法性等。一般这些处理的成果都会决议用户的恳求是否能够进行,或是系统的呼应应该用什么格局来表明。

关于这种预处理和后处理问题,传统上,开发人员会规划一系列额定的检测程序模块,也便是一整套if/else句子,而且指定假如其间任何一个检测失利,一切的处理作业都会退出。明显,这种办法是存在很大坏处的,即代码的可读性、可维护性都会被大大下降,一起将检测作业融于一般的程序模块,使得整个程序的模块性难以确保。

处理这种问题的关键在于,规划一种简略的技能,以能够增加或移除额定处理的模块,而这些模块一般都能够完结必定的检测和过滤功用。依据以上的评论,J2EE研究人员提出了规划方式----截取过滤器作为处理方案,这种方式能够在不影响中心处理模块的状况下,完结可刺进的过滤器来履行一般的处理功用。

从理论上来说,这种过滤器能够截取客户恳求和系统呼应,并进行相应的预处理和后处理;一起开发人员也能够随时依据需求移除这些过滤器,并不必忧虑会改动任何其他模块。

咱们这儿所说的预处理和后处理功用,一般是指一些根本的系统服务,如安全、登录,系统调试等。履行这些功用的过滤器一般是需求与中心模块分隔的,而且因为系统功用或规矩的改变,这些模块随时或许被增加或删去。

下面供给一些关于截取过滤器的图示,以协助咱们更好地了解这种规划方式,并合理地加以运用。图19表明晰截取过滤器方式的全体结构,图19显现了截取过滤器中的参加模块和相互之间的联络。

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第7张

图19 截取过滤器方式

J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器  J2EE体系架构 对象 截取过滤器 第8张

图20 截取过滤器序列图

下面咱们别离来阐明图20中的各个模块:

(1)过滤管理器(Filter Manager)。过滤管理器担任过滤器的首要处理作业,即创立过滤器链目标以及相应的过滤器组成,并初始化整个处理进程。

(2)过滤器链(Filter Chain)。过滤器链是一组互不依靠的过滤器有序调集。

(3)过滤器1,过滤器2,过滤器3(FilterOne,FilterTwo,FilterThree)。这些都是供给不同服务的过滤器,而过滤器链则担任它们的和谐作业。

经过选用这种规划方式,运用系统能够获得更便利的中心操控,这是因为过滤器能够供给处理多种恳求的中心模块,并能依据后端的处理模块而解说和润饰用户的恳求,使得该恳求能更好地与处理模块所供给的功用匹配。别的,过滤器一般能够将不同品种的服务集合在一起,并供给适当灵敏的服务组合,运用系统能够经过运用截取过滤器进步其重用性,过滤器能够随时依据需求从其他程序模块中刺进或移除,而且因为它们一般具有规范的接口,开发人员能够运用一组相似的过滤器,并在不同的状况下进行全组的重用。
选用这种规划方式也会带来必定的问题,即在过滤器之间同享信息将变得十分困难,这是因为依据其界说和需求,每个过滤器的规划和开发都截然不同。因此假如在不同的过滤器之间需求同享信息的话,其价值将是十分贵重的。

【修改引荐】

  1. J2EE系统架构规划介绍(2)
  2. J2EE系统架构规划介绍(1)
  3. 依据开源搜索引擎的架构规划和J2EE完结(二)
  4. 依据开源搜索引擎的架构规划和J2EE完结(一)
  5. J2EE架构的6个***实践
转载请说明出处
知优网 » J2EE系统架构规划介绍(3) 值目标、传输目标、截取过滤器

发表评论

您需要后才能发表评论