﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-★yesjoy★-文章分类-J2EE结构</title><link>http://www.blogjava.net/yesjoy/category/7266.html</link><description>&lt;font color="red"&gt;★&lt;/font&gt;&lt;font color="blue"&gt;总在爬山 所以艰辛;总在寻梦 所以苦痛&lt;/font&gt;&lt;font color="red"&gt;★&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 07 Sep 2010 03:01:47 GMT</lastBuildDate><pubDate>Tue, 07 Sep 2010 03:01:47 GMT</pubDate><ttl>60</ttl><item><title>J2EE 全面简介</title><link>http://www.blogjava.net/yesjoy/articles/29994.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Thu, 09 Feb 2006 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/29994.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/29994.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/29994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/29994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/29994.html</trackback:ping><description><![CDATA[本文从五个方面对J2EE进行了比较全面的介绍。从J2EE的概念说起，到它的优势，到J2EE典型的四层模型，和它的框架结构，最后是J2EE十三种核心技术的一个简介。本文分门别类的对J2EE中的服务，组件，层次，容器，API都做了比较详细的介绍，相信看完此文，读者会对J2EE有一个更清晰的认识。<BR><BR>一.&nbsp;J2EE的概念<BR>目前，Java&nbsp;2平台有3个版本，它们是适用于小型设备和智能卡的Java&nbsp;2平台Micro版（Java&nbsp;2&nbsp;Platform&nbsp;Micro&nbsp;Edition，J2ME）、适用于桌面系统的Java&nbsp;2平台标准版（Java&nbsp;2&nbsp;Platform&nbsp;Standard&nbsp;Edition，J2SE）、适用于创建服务器应用程序和服务的Java2平台企业版（Java&nbsp;2&nbsp;Platform&nbsp;Enterprise&nbsp;Edition，J2EE）。<BR>J2EE是一种利用Java&nbsp;2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java&nbsp;2平台的标准版，J2EE不仅巩固了标准版中的许多优点，例如"编写一次、随处运行"的特性、方便存取数据库的JDBC&nbsp;API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等，同时还提供了对&nbsp;EJB（Enterprise&nbsp;JavaBeans）、Java&nbsp;Servlets&nbsp;API、JSP（Java&nbsp;Server&nbsp;Pages）以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的<BR>体系结构。<BR>J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台，J2EE降低了开发多层应用的费用和复杂性，同时提供对现有应用程序集成强有力支持，完全支持Enterprise&nbsp;JavaBeans，有良好的向导支持打包和部署应用，添加目录支持，增强了安全机制，提高了性能。<BR><BR>二.&nbsp;J2EE的优势<BR>J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:<BR>保留现存的IT资产:&nbsp;由于企业必须适应新的商业需求，利用已有的企业信息系统方面的投资，而不是重新制定全盘方案就变得很重要。这样，一个以渐进的（而不是激进的，全盘否定的）方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2EE架构可以充分利用用户原有的投资，如一些公司使用的BEA&nbsp;Tuxedo、IBM&nbsp;CICS,&nbsp;IBM&nbsp;Encina,、Inprise&nbsp;VisiBroker&nbsp;以及Netscape&nbsp;Application&nbsp;Server。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资，进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行，现有的操作系统和硬件也<BR>能被保留使用。<BR>高效的开发:&nbsp;J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上，相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:<BR>状态管理服务&nbsp;--&nbsp;让开发人员写更少的代码，不用关心如何管理状态，这样能够更快地完成程序开发。<BR>持续性服务&nbsp;--&nbsp;让开发人员不用对数据访问逻辑进行编码就能编写应用程序，能生成更<BR>轻巧，与数据库无关的应用程序，这种应用程序更易于开发与维护。<BR>分布式共享数据对象CACHE服务&nbsp;--&nbsp;让开发人员编制高性能的系统，极大提高整体部署的<BR>伸缩性。<BR>支持异构环境:&nbsp;J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不<BR>依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次<BR>就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许<BR>客户订购与J2EE兼容的第三方的现成的组件，把他们部署到异构环境中，节省了由自己<BR>制订整个方案所需的费用。<BR>可伸缩性:&nbsp;企业必须要选择一种服务器端平台，这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统，这种系统单机可支持64至256个处理器。（这是NT服务器所望尘莫及的）J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈，允许多台服务器集成部署。这种部署可达数千个处理器，实现可高度伸缩的系统，满足未来商业应用的需要。<BR>稳定的可用性:&nbsp;一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的，即使在夜间按计划停机也可能造成严重损失。若是意外停机，那会有灾难性后果。J2EE部署到可靠的操作环境中，他们支持长期的可用性。一些J2EE部署在WINDOWS环境中，客户也可选择健壮性能更好的操作系统如Sun&nbsp;Solaris、IBM&nbsp;OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。<BR><BR><BR>三.&nbsp;J2EE&nbsp;的四层模型<BR>J2EE使用多层的分布式应用模型，应用逻辑按功能划分为组件，各个应用组件根据他们<BR>所在的层分布在不同的机器上。事实上，sun设计J2EE的初衷正是为了解决两层模式(cl<BR>ient/server)的弊端，在传统模式中，客户端担当了过多的角色而显得臃肿，在这种模<BR>式中，第一次部署的时候比较容易，但难于升级或改进，可伸展性也不理想，而且经常<BR>基于某种专有的协议——通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常<BR>困难。现在J2EE&nbsp;的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个<BR>多层化应用能够为不同的每种服务提供一个独立的层，以下是&nbsp;J2EE&nbsp;典型的四层结构:<BR>运行在客户端机器上的客户层组件<BR>运行在J2EE服务器上的Web层组件<BR>运行在J2EE服务器上的业务逻辑层组件<BR>运行在EIS服务器上的企业信息系统(Enterprise&nbsp;information&nbsp;system)层软件<BR>J2EE应用程序组件<BR>J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元，它们通过相关的类<BR>和文件组装成J2EE应用程序，并与其他组件交互。J2EE说明书中定义了以下的J2EE组件<BR>:<BR>应用客户端程序和applets是客户层组件.<BR>Java&nbsp;Servlet和JavaServer&nbsp;Pages(JSP)是web层组件.<BR>Enterprise&nbsp;JavaBeans(EJB)是业务层组件.<BR>客户层组件<BR>J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.<BR>web&nbsp;层组件J2EE&nbsp;web层组件可以是JSP&nbsp;页面或Servlets.按照J2EE规范，静态的HTML页面<BR><BR><BR>和Applets不算是web层组件。<BR>正如下图所示的客户层那样，web层可能包含某些&nbsp;JavaBean&nbsp;对象来处理用户输入，并把<BR>输入发送给运行在业务层上的enterprise&nbsp;bean&nbsp;来进行处理。<BR>业务层组件<BR>业务层代码的逻辑用来满足银行，零售，金融等特殊商务领域的需要,由运行在业务层上<BR>的enterprise&nbsp;bean&nbsp;进行处理.&nbsp;下图表明了一个enterprise&nbsp;bean&nbsp;是如何从客户端程序<BR>接收数据，进行处理(如果必要的话),&nbsp;并发送到EIS&nbsp;层储存的，这个过程也可以逆向进<BR>行。<BR>有三种企业级的bean:&nbsp;会话(session)&nbsp;beans,&nbsp;实体(entity)&nbsp;beans,&nbsp;和&nbsp;消息驱动(mes<BR>sage-driven)&nbsp;beans.&nbsp;会话bean&nbsp;表示与客户端程序的临时交互.&nbsp;当客户端程序执行完后<BR>,&nbsp;会话bean&nbsp;和相关数据就会消失.&nbsp;相反,&nbsp;实体bean&nbsp;表示数据库的表中一行永久的记录<BR>.&nbsp;当客户端程序中止或服务器关闭时,&nbsp;就会有潜在的服务保证实体bean&nbsp;的数据得以保存<BR>.消息驱动&nbsp;bean&nbsp;结合了会话bean&nbsp;和&nbsp;JMS的消息监听器的特性,&nbsp;允许一个业务层组件异<BR>步接收JMS&nbsp;消息.<BR>企业信息系统层<BR>企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划&nbsp;(ERP)<BR>,&nbsp;大型机事务处理,&nbsp;数据库系统,和其它的遗留信息系统.&nbsp;例如，J2EE&nbsp;应用组件可能为<BR>了数据库连接需要访问企业信息系统<BR>四.&nbsp;J2EE&nbsp;的结构<BR>这种基于组件，具有平台无关性的J2EE&nbsp;结构使得J2EE&nbsp;程序的编写十分简单，因为业务<BR>逻辑被封装成可复用的组件，并且J2EE&nbsp;服务器以容器的形式为所有的组件类型提供后台<BR>服务.&nbsp;因为你不用自己开发这种服务,&nbsp;所以你可以集中精力解决手头的业务问题.<BR><BR><BR>容器和服务<BR>容器设置定制了J2EE服务器所提供得内在支持，包括安全，事务管理，JNDI(Java&nbsp;Nami<BR>ng&nbsp;and&nbsp;Directory&nbsp;Interface)寻址,远程连接等服务，以下列出最重要的几种服务：<BR>J2EE安全(Security)模型可以让你配置&nbsp;web&nbsp;组件或enterprise&nbsp;bean&nbsp;,这样只有被授权<BR>的用户才能访问系统资源.&nbsp;每一客户属于一个特别的角色，而每个角色只允许激活特定<BR>的方法。你应在enterprise&nbsp;bean的布置描述中声明角色和可被激活的方法。由于这种声<BR>明性的方法，你不必编写加强安全性的规则。<BR>J2EE&nbsp;事务管理（Transaction&nbsp;Management）模型让你指定组成一个事务中所有方法间的<BR>关系，这样一个事务中的所有方法被当成一个单一的单元.&nbsp;当客户端激活一个enterpri<BR>se&nbsp;bean中的方法，容器介入一管理事务。因有容器管理事务，在enterprise&nbsp;bean中不<BR>必对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述<BR>文件中声明enterprise&nbsp;bean的事务属性，而不用编写并调试复杂的代码。容器将读此文<BR>件并为你处理此enterprise&nbsp;bean的事务。<BR>JNDI&nbsp;寻址(JNDI&nbsp;Lookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这<BR>样应用程序组件可以访问名字和目录服务.<BR>J2EE远程连接（Remote&nbsp;Client&nbsp;Connectivity）模型管理客户端和enterprise&nbsp;bean间的<BR>低层交互.&nbsp;当一个enterprise&nbsp;bean创建后,&nbsp;一个客户端可以调用它的方法就象它和客户<BR>端位于同一虚拟机上一样.<BR>生存周期管理（Life&nbsp;Cycle&nbsp;Management）模型管理enterprise&nbsp;bean的创建和移除,一个<BR>enterprise&nbsp;bean在其生存周期中将会历经几种状态。容器创建enterprise&nbsp;bean，并在<BR>可用实例池与活动状态中移动他，而最终将其从容器中移除。即使可以调用enterprise<BR>&nbsp;bean的create及remove方法，容器也将会在后台执行这些任务。<BR><BR><BR>数据库连接池（Database&nbsp;Connection&nbsp;Pooling）模型是一个有价值的资源。获取数据库<BR>连接是一项耗时的工作，而且连接数非常有限。容器通过管理连接池来缓和这些问题。<BR>enterprise&nbsp;bean可从池中迅速获取连接。在bean释放连接之可为其他bean使用。<BR>容器类型<BR>J2EE应用组件可以安装部署到以下几种容器中去:<BR>EJB&nbsp;容器管理所有J2EE&nbsp;应用程序中企业级bean&nbsp;的执行.&nbsp;enterprise&nbsp;bean&nbsp;和它们的容<BR>器运行在J2EE&nbsp;服务器上.<BR>Web&nbsp;容器管理所有J2EE&nbsp;应用程序中JSP页面和Servlet组件的执行.&nbsp;Web&nbsp;组件和它们的容<BR>器运行在J2EE&nbsp;服务器上.<BR>应用程序客户端容器管理所有J2EE应用程序中应用程序客户端组件的执行.&nbsp;应用程序客<BR>户端和它们的容器运行在J2EE&nbsp;服务器上.<BR>Applet&nbsp;容器是运行在客户端机器上的web浏览器和&nbsp;Java&nbsp;插件的结合.<BR>五.&nbsp;J2EE的核心API与组件<BR>J2EE平台由一整套服务（Services）、应用程序接口（APIs）和协议构成，它对开发基<BR>于Web的多层应用提供了功能支持，下面对J2EE中的13种技术规范进行简单的描述(限于<BR>篇幅，这里只能进行简单的描述):<BR>JDBC(Java&nbsp;Database&nbsp;Connectivity):<BR>JDBC&nbsp;API为访问不同的数据库提供了一种统一的途径，象ODBC一样，JDBC对开发者屏蔽<BR>了一些细节问题，另外，JDCB对数据库的访问也具有平台无关性。<BR>JNDI(Java&nbsp;Name&nbsp;and&nbsp;Directory&nbsp;Interface):<BR>JNDI&nbsp;API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源<BR>如DNS和LDAP，本地文件系统，或应用服务器中的对象。<BR><BR><BR>EJB(Enterprise&nbsp;JavaBean):<BR>J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实<BR>施分布式商务逻辑，由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发<BR>。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的<BR>服务，例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的<BR>是，EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性，使得有的厂商能够以一种<BR>和EJB平行的方式来达到同样的目的。<BR>RMI(Remote&nbsp;Method&nbsp;Invoke):<BR>正如其名字所表示的那样，RMI协议调用远程对象上方法。它使用了序列化方式在客户端<BR>和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。<BR>Java&nbsp;IDL/CORBA:<BR>在Java&nbsp;IDL的支持下，开发人员可以将Java和CORBA集成在一起。&nbsp;他们可以创建Java对<BR>象并使之可在CORBA&nbsp;ORB中展开,&nbsp;或者他们还可以创建Java类并作为和其它ORB一起展开<BR>的CORBA对象的客户。后一种方法提供了另外一种途径，通过它Java可以被用于将你的新<BR>的应用和旧的系统相集成。<BR>JSP(Java&nbsp;Server&nbsp;Pages):<BR>JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对<BR>这些Java代码进行处理，然后将生成的HTML页面返回给客户端的浏览器。<BR>Java&nbsp;Servlet:<BR>Servlet是一种小型的Java程序，它扩展了Web服务器的功能。作为一种服务器端的应用<BR>，当被请求时开始执行，这和CGI&nbsp;Perl脚本很相似。Servlet提供的功能大多与JSP类似<BR>，不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码，而servlet<BR><BR><BR>s全部由Java写成并且生成HTML。<BR>XML(Extensible&nbsp;Markup&nbsp;Language):<BR>XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。<BR>XML的发展和Java是相互独立的，但是，它和Java具有的相同目标正是平**立性。通过<BR>将Java和XML的组合，您可以得到一个完美的具有平**立性的解决方案。<BR>JMS(Java&nbsp;Message&nbsp;Service):<BR>MS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域，有<BR>支持发布/订阅(publish/subscribe)类型的域，并且提供对下列类型的支持：经认可的<BR>消息传递,事务型消息的传递，一致性消息和具有持久性的订阅者支持。JMS还提供了另<BR>一种方式来对您的应用与旧的后台系统相集成。<BR>JTA(Java&nbsp;Transaction&nbsp;Architecture):<BR>JTA定义了一种标准的API，应用系统由此可以访问各种事务监控。<BR>JTS(Java&nbsp;Transaction&nbsp;Service):<BR>JTS是CORBA&nbsp;OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理<BR>器是在高层支持Java&nbsp;Transaction&nbsp;API&nbsp;(JTA)规范，并且在较底层实现OMG&nbsp;OTS&nbsp;specif<BR>ication的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信<BR>资源管理器提供了事务服务。<BR>JavaMail:<BR>JavaMail是用于存取邮件服务器的API，它提供了一套邮件服务器的抽象类。不仅支持S<BR>MTP服务器，也支持IMAP服务器。<BR>JTA(JavaBeans&nbsp;Activation&nbsp;Framework):<BR>JavaMail利用JAF来处理MIME编码的邮件附件。&nbsp;<BR><img src ="http://www.blogjava.net/yesjoy/aggbug/29994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2006-02-09 09:23 <a href="http://www.blogjava.net/yesjoy/articles/29994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>步入J2EE架构和过程（2）</title><link>http://www.blogjava.net/yesjoy/articles/29675.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Mon, 06 Feb 2006 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/29675.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/29675.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/29675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/29675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/29675.html</trackback:ping><description><![CDATA[4、&nbsp;对象设计&nbsp;<BR>在架构规范的指导下，设计从技术上扩展和修改了分析结果。虽然分析阶段的领域对象建模应该与技术细节无关，但是对象设计完全依赖于技术因素，包括平台、语言的类型和架构开发阶段选择的供应商。分析时，抬头望着星星，但在设计阶段，则要脚踏实地。理论上，为了维持业务对象的基本属性和行为，除非绝对必要，不应该破坏它们。&nbsp; 
<P></P>
<P>在架构结果的指导下，详细设计工作应该说明所有类的规格，包括必须实现的属性、它们的详细接口和伪代码或操作的纯文本描述。规格说明应该足够详细使得和模型图结合时，它可以提供所有必须的编码信息。在许多自动化软件生产过程中，我们可以从面向对象图生成代码框架。图5和6&nbsp;说明了对一些领域对象的高层和详细设计对象。注意桩（stub）和框架（skeleton）在图中经常是不可见的，因为它们对设计人员和编程员来说是透明的。我将它们包括在图6中以说明EJB的基础部分。&nbsp;</P>
<P><BR><IMG src="http://info.shangdu.com/new/adpic/200351002229.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0><BR>图6&nbsp;对象设计模型：订单EJB详细设计&nbsp;</P>
<P>在完成了详细对象设计后，还需要完成领域对象的对象-关系映射。原因是虽然面向对象方法学现在非常流行，但是大多数流行且成熟的持续性存储却是关系型的。另外，在许多情况下，客户的IT基础设施已经反映了对商业RDBMS供应商的投资和偏爱。所以，将领域对象转换成关系模型或数据库表是非常重要的。虽然有许多容器管理的持续性工具，但它们不能取代好的关系数据库设计。&nbsp;</P>
<P>5、&nbsp;实现&nbsp;</P>
<P>在良好的架构和详细设计条件下，实现应该是一个明确的任务。另外，因为我们设计和实现架构原型阶段的纵向联合部分，所以实现阶段应该更没有什么值得惊讶的。在许多组织中，开发者经常过早地到达实现阶段。尤其当管理者盯着开发人员确保在编码，而不是做他们认为在浪费公司时间的其他事情时，这种情况变得更加严重。&nbsp;</P>
<P>结果，不再花数小时或数天绘出UML草图，而是通常在发费数周或数月编码的同时测试自己的想法。由于在这种情况下，所有地架构决定和设计都是在编码阶段做出来的，所以经常过了数月后才发现开发的方向出错了。&nbsp;</P>
<P>6、&nbsp;验证&nbsp;</P>
<P>验证包括测试验证系统按设计要求运行并满足需求。验证过程发生在整个开发生命周期的开发和产品环境中。单元测试、集成测试和用户测试本身就是非常重要的主题。&nbsp;</P>
<P>7、&nbsp;装配和部署&nbsp;</P>
<P>构件装配和解决方案部署在J2EE开发中特别重要。开发和产品环境可能非常不同。如果EJB在系统中，你需要使用供应商特定的工具得到容器自动生成的类，因为，正如我以前指出的，Web和应用程序构件配置对不同的供应商来说是不同的。你也必须考虑要部署的系统是否含有供应商特定代码实现。在可扩展架构中，系统结构应该是稳定的但也应该在不影响整个系统的条件下支持新或老构件的增量部署。&nbsp;</P>
<P>8、&nbsp;运行和维护&nbsp;</P>
<P>在最后阶段，应用程序到了用户手中，你必须给他们提供培训和文档。用户会发现错误并可能要求新特性。你必须适当地改变管理过程来处理这些情况。你不必为了部署一个新构件或取代老构件而关闭一个正在运行的系统。&nbsp;</P>
<P>架构开发过程&nbsp;</P>
<P>知道了必须做出许多架构决定，因此我们必须为架构开发描绘一个过程。对于一个企业来说通常有许多应用项目，它们中的一些可能跨越数年，结果是系统演化包含许多周期。在你的领域里存在着许多跨越多个项目的通用需求。你应该不费力地在它的生命周期或其他项目中使用以前项目周期的可扩展且可重用的架构。为一系列软件应用提供同属结构和行为的通用框架和可重用软件架构是非常需要的。&nbsp;</P>
<P>如果是第一个J2EE项目，架构必须做原型、测试、度量、分析并在迭代中进行推敲。蓝图提供了许多好的设计指导和实践，宠物店示例程序可以作为一个很好的参考架构。最有效地快速、高质量发布好的解决方案的方法是接受和扩展蓝图参考架构并插入你自己的业务构件。你最后要做的就是改造车轮。&nbsp;</P>
<P>接受一个参考架构&nbsp;</P>
<P>就我的理解，宠物店架构的精华是模型-视图-控制和命令模式。你可以将这些模式应用到以Web为中心和以EJB为中心的系统中。对于每个领域对象，视图用嵌套的JSP表示。控制器处理相关的业务事件，领域对象封装业务逻辑、事物和安全。我们使用门户servlet作为中心控制器接受和截获所有用户的动作。它将业务事件分发给特定的调用领域对象改变持续状态的领域对象控制器。依靠事件处理结果，控制器选择下一个要展现的视图。下面是我们可以修改并在大多数J2EE应用程序中使用的主要构件：&nbsp;</P>
<P>a、&nbsp;MainServlet：门户构件，Web容器和框架之间的接口&nbsp;</P>
<P>b、&nbsp;ModelUpdateListener：获得模型更新事件对象的接口&nbsp;</P>
<P>c、&nbsp;ModelUpdateNotifier：当更新模型事件发生时通知侦听器&nbsp;</P>
<P>d、&nbsp;RequestProcessor：处理所有从MainServlet来的请求。&nbsp;</P>
<P>e、&nbsp;RequestHandler：即插即用请求处理构件接口&nbsp;</P>
<P>f、&nbsp;RequestHandlerMapping：包含请求处理映射规则&nbsp;</P>
<P>g、&nbsp;RequestToEventTranslator：中心请求处理器根据请求处理映射规则代理即插即用请求处理构件的请求。将http请求转换为业务事件&nbsp;</P>
<P>h、&nbsp;EstoreEvent：业务事件&nbsp;</P>
<P>i、&nbsp;ShoppingClientControllerWebImpl：代理EJB层门户控制器&nbsp;</P>
<P>j、&nbsp;ScreenflowManager：控制屏幕流，选择视图&nbsp;</P>
<P>k、&nbsp;ModelUpdateManager：EJB层模型更新管理器，通知什么模型由于事件发生了改变&nbsp;</P>
<P>l、&nbsp;ShoppingClientControllerEJB：EJB层门户，为EJB客户提供远程服务&nbsp;</P>
<P>m、&nbsp;StateMachine：中心事件处理器，根据状态处理映射规则代理即插即用处理构件的事件处理&nbsp;</P>
<P>n、&nbsp;StateHandler：EJB层状态处理接口&nbsp;</P>
<P>o、&nbsp;StateHandlerMapping：包含状态处理映射规则&nbsp;</P>
<P>扩展参考架构&nbsp;</P>
<P>虽然蓝图示例程序是一个好的起点，但应该根据每个项目或领域修改它。设计模式是可重用的微体系结构，可以使用它扩展参考架构。提供了一组有用的J2EE模式目录的蓝图和23个"四人帮"模式都是非常不错的资源。例如，如果想扩展参考架构支持工作流管理，你可以在部署或运行时动态地在中心控制器注册事件处理器。中心控制器会询问每个注册的事件处理器直到一个处理器返回消息表明到了命令链的末端。&nbsp;</P>
<P>插入你的业务构件&nbsp;</P>
<P>J2EE技术对每个人都是一样的，但是不同的领域，我们要解决的问题是不同的。一旦建立了一个基本的J2EE框架，必须实现一些用例来说明架构确实可以为你的领域服务。可以通过选用捕获系统关键功能的场景来实现，这些场景经常使用来展现关键的技术风险。从领域分析模型入手，可以象我们在图5和6中那样将领域对象映射成高层和低层设计模型。实现低层设计模型并测试是否真正在工作。如果每件事都按计划运行，那么重新评估风险开始下一个迭代，扩展要考虑的场景并选择更多的场景扩展架构的覆盖范围。经过几次迭代后，原始的架构原型应该变得稳定。识别要购买的构件，要保留的遗留系统和怎样将它们对接。下一步是软件设计，你可以使用设计指导中规定好的类似方法和过程继续开发。&nbsp;</P>
<P>一步一步&nbsp;</P>
<P>我们使用一个过程来将一个复杂问题分解为较小的几个问题，这使得我们可以更容易的理解和解决它们。在本文中，我们将J2EE开发分解为八个步骤，主要集中在架构和设计。我已经阐述了重要的架构并为架构决定提供了一个过程。我也讨论了J2EE架构师的角色和可交付产品。&nbsp;</P>
<P>学习使用这些步骤开发J2EE解决方案就象学习跳舞的步骤一样。首先需要自觉并持之以恒地练习基本步骤。但是，一旦你对它们相当熟悉后，应该将它们放在一起并将注意力更多地集中在规模、速度、流和特定上下文中每一步的节奏。但永远不要让一个过程限制了创造性。而应该接受和扩展过程以满足自己特殊需要。记住，最终目的是提供满足客户需求的完整的J2EE解决方案。&nbsp;</P>
<P></P><img src ="http://www.blogjava.net/yesjoy/aggbug/29675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2006-02-06 11:33 <a href="http://www.blogjava.net/yesjoy/articles/29675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>步入J2EE架构和过程（1）</title><link>http://www.blogjava.net/yesjoy/articles/29673.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Mon, 06 Feb 2006 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/29673.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/29673.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/29673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/29673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/29673.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=5 width=610>
<TBODY>
<TR>
<TD><FONT class=c style="FONT-SIZE: 14px">摘要&nbsp; 
<P></P>
<P>Java2企业版（J2EE）平台由四个关键部分构成：规格说明、参考实现、兼容性测试套件和蓝图（BluePrint）计划。蓝图描绘了分布式组件架构最好的实践和设计指导方针。本文基于Rational统一过程和BluePrint示例程序介绍一个八步骤J2EE开发方法学。通过阅读这篇文章，你可以了解许多重要的J2EE架构的话题，并且能够扩展和修改这个简单的方法来解决自己特有的业务问题。&nbsp;</P>
<P>在商业世界里，我们使用Java2&nbsp;企业版（J2EE）解决业务问题、开发商业软件或者提供转包服务。如果一家公司想使用多层体系结构建造一个电子商务网站，通常在整个开发生命周期中需要涉及到管理者、架构师，设计人员、编程人员、测试人员和数据库专家。&nbsp;</P>
<P>为了使不同部门能高效率地工作，他们经常需要一个软件开发过程。一些经典的开发过程包括瀑布模型、快速应用开发（RAD）和极限编程（XP）。本文我们将集中于一个流行的软件工程过程，即Rational统一过程（RUP）。RUP提供了一个给角色分配任务和责任的严格方法。它的目标是保证我们在预期的进度和预算内开发出满足用户需求的高质量软件。&nbsp;</P>
<P>我在J2EE开发中使用RUP出于以下三个原因。首先，RUP以架构为中心；在将资源分配给全面开发之前，它先开发一个可执行的架构原型。其次，RUP是迭代并基于构件的。该架构基线通常包括一个框架或基础设施以便于通过迭代增加构件，在不影响系统其他部分的前提下定制和扩展一个系统的功能。最后，RUP利用一门工业标准语言--UML，可视化建模系统的架构和构件。RUP有四个不同的开发阶段：初始、细化、构造和移交。然而，本文从技术角度覆盖了J2EE开发的八个必要活动，主要集中在系统架构。&nbsp;</P>
<P>1、&nbsp;需求分析&nbsp;</P>
<P>需求分析描述系统应该做什么或不应该做什么使得开发者和客户可以签署一份原始的商业合同。可以使用业务概念、领域术语、用例和用户界面（UI）模型形成功能需求文档。对于非功能需求，如性能和事务，可以在需求文档附件中详细说明。根据参与项目深度的不同，确定在纸上还是使用HTML建造高层UI模型。&nbsp;</P>
<P>图1&nbsp;展现了一个典型电子商务系统中的两个用例。查看订单（viewOrder）用例告诉我们一个用户通过Web界面登陆系统、查看订单列表，点击链接查看特定订单的详细信息。增加订单项（addLineItem）用例告诉我们浏览产品列表、选择感兴趣的产品并将它们添加到购买订单中。&nbsp;</P>
<P><A href="http://info.shangdu.com/new/images/onimg/ai/15007.jpg" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://info.shangdu.com/new/images/onimg/ai/15007.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0></A><BR>图1&nbsp;订购用例&nbsp;</P>
<P>2、&nbsp;面向对象分析&nbsp;</P>
<P>分析人员构造问题领域模型：类、对象和交互。分析应该与技术和实现细节无关，并包含一个理想的模型。对象分析可以帮助理解问题并获得关于问题领域的知识。因为业务过程的改变比信息技术的改变要慢得多，所以必须要维持一个不含技术细节的纯领域模型。&nbsp;</P>
<P>这两个步骤--需求分析和面向对象分析--不是J2EE特有的；对许多面向对象方法学来说，它们都非常通用。图2&nbsp;显示了一个宠物店示例程序的高层对象分析模型。它用图例说明了我们从需求分析用例中识别的主要概念。我们把这些概念建模成对象并标识它们的关系。&nbsp;</P>
<P><A href="http://info.shangdu.com/new/images/onimg/ai/15008.jpg" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://info.shangdu.com/new/images/onimg/ai/15008.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0></A><BR>图2&nbsp;更高层分析模型：宠物店领域&nbsp;</P>
<P>需求和对象分析的结果是为J2EE架构的开发提供切入点。为了开发架构，可以选择一个纵向联合部分（vertical&nbsp;piece）--经常是关键部分，如订单领域对象模型--进行对象设计、实现、测试和部署。（纵向联合部分，一个RUP概念，是指系统的一小部分。起始点是图1所示的用例子集和图3所示的领域分析模型。一个纵向联合部分的实现结果是一个全功能的微小系统，包括UI层的JSP，中间层业务对象如EJB和后端数据库。）可以将从原型中获得的经验应用于领域对象并作为对象设计阶段的指导。&nbsp;</P>
<P><A href="http://info.shangdu.com/new/images/onimg/ai/15009.jpg" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://info.shangdu.com/new/images/onimg/ai/15009.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0></A><BR>图3&nbsp;详细对象分析：订单&nbsp;</P>
<P>3、&nbsp;架构规格说明&nbsp;</P>
<P>经过前面两个步骤，业务领域问题和需求应该比较明确了。现在，我们将工作集中在技术策略和架构上。架构是指所有构件组合定义系统的一个蓝图：结构、接口和通讯机制。我们可以进一步将架构分为企业级和应用级架构。&nbsp;</P>
<P>企业级系统架构&nbsp;</P>
<P>企业级系统架构包括硬件和软件基础设施、网络布局、开发、测试、生产环境等等。它反映了一个企业的长期投资。开发前，需要评估已存在的软件和硬件基础设施，如果不完全支持J2EE的话，增加新构件更新已存在系统。你需要彻底地评估硬件，包括计算机、路由器、网络转换器和网络布局，因为它们都影响到系统的性能和可靠性。图4&nbsp;显示了一个可能的多层网络布局。&nbsp;</P>
<P><A href="http://info.shangdu.com/new/images/onimg/ai/15010.jpg" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://info.shangdu.com/new/images/onimg/ai/15010.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0></A><BR>图4&nbsp;企业级架构：网络布局&nbsp;</P>
<P>如图4所示的一个多层企业级架构包括以下几个主要构件：&nbsp;</P>
<P><BR>一个Web浏览器客户端，可能在也可能不在客户端组织的防火墙内&nbsp;<BR>一个HTTP服务器，是一个对公众开放的Web服务器。它通常位于一个称作DMZ的子网内&nbsp;<BR>Web容器主表示层和可能的业务逻辑构件&nbsp;<BR>应用程序容器主业务逻辑构件&nbsp;<BR>关系数据库管理系统（RDBMS）和数据库主数据、数据逻辑&nbsp;</P>
<P><BR>你使用的系统架构类型依赖于安全、性能和可靠性的需求，也依赖于组织的财政状况。在缺少经验的情况下，也可以适当地从一个修理厂电话订购一台简单地二手计算机。Internet上有许多开放源代码的操作系统、Web服务器、应用程序服务器和数据库管理系统。得到这些系统的代价只是几百美元和熬几个通宵。&nbsp;</P>
<P>象许多华尔街金融机构这样的高端客户也许需要一个连续支持安全、高吞吐量交易和不可预料网络通讯的系统。在这种情况下，为了容错，通常需要将Web服务器和应用程序服务器集群配置成一个n层架构。&nbsp;</P>
<P>还需要评估软件基础设施，包括Web服务器、安全管理软件、应用程序服务器、域名管理服务器、数据库管理系统和第三方软件构件。如果还没有购买应用程序服务器，选择一个J2EE供应商将是评估过程的一个重要方面。应该注意到不同的供应商对J2EE的实现程度是不同的，一些供应商只支持老的J2EE版本。另外，一些Web容器或应用程序容器可能比其他的速度要快。除了实现J2EE规范外，许多供应商还出售J2EE基础构件或框架。选择一个稳定的提供支持的J2EE供应商也非常关键。你可以在系统基础设施层面上购买或开发的通用功能包括：&nbsp;</P>
<P><BR>事务&nbsp;<BR>国际化和本地化&nbsp;<BR>集群和对象分布&nbsp;<BR>应用程序性能度量和剖析&nbsp;<BR>通讯&nbsp;<BR>工作流管理&nbsp;<BR>入口和个性化管理&nbsp;<BR>层对层通讯协议&nbsp;<BR>安全和防火墙&nbsp;</P>
<P><BR>应用架构&nbsp;</P>
<P>应用架构参考一个特定的项目和规范建立在企业级系统架构的上层。在基础设施完成后，架构师研究怎样构造一个特定的应用。如果你的企业级架构仅部分支持老的J2EE版本，可以先升级你的系统。如果由于预算或时间关系不能升级，那么必须在更老版本规定的技术范围内开展工作。虽然构造企业级重用构件非常重要，但是必须首先要能够使用。这里的最终目标是满足客户的需求--一次一个项目。&nbsp;</P>
<P>架构师不是设计师；架构和设计是完全不同。一个应用架构的范围包括系统的主要结构、架构设计模式和可以在上面增加构件的框架。架构主要关注的是非功能性方面，而设计关注应用业务用例将领域对象模型转换成技术对象模型。应用架构是项目的结构，一个特殊的应用程序。通过应用架构开发，你通常必须要做的应用架构决定包括：&nbsp;</P>
<P><BR>层之间进行功能划分&nbsp;<BR>领域对象建模&nbsp;<BR>要保护的遗留系统&nbsp;<BR>要购买的软件构件&nbsp;<BR>要开发的构件&nbsp;<BR>怎样集成第三方构件&nbsp;</P>
<P><BR>图3的订单领域对象说明了怎样对领域对象进行建模。利用当前的Java技术，可以将领域对象分布在作为开发者管理持续性对象的Web容器中、应用程序服务器的EJB中或者作为RDBMS宿主的Java存储过程中。&nbsp;</P>
<P>在宠物店蓝图中，我们将订单对象设计成一个实体bean，一个详细对象和一个数据访问对象，如图5和后面的图6所示。当你看到这个的时候，你应该意识到架构的重要性。为什么分析模型中的一个领域对象映射成这么多对象？如果改变设计，会出现什么问题？你也许听说过EJB的好处，但是要注意不同供应商的性能是不同的。当一种新技术到来的时候，你需要在投入全面设计之前进行一些研究。你可以经常地将设计和实现领域对象模型纵向联合部分的经验应用到其他许多领域对象中。这就是架构开发的内容。&nbsp;<BR><A href="http://info.shangdu.com/new/images/onimg/ai/15011.jpg" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://info.shangdu.com/new/images/onimg/ai/15011.jpg" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0></A><BR>图4&nbsp;企业级架构：网络布局&nbsp;</P>
<P>如图4所示的一个多层企业级架构包括以下几个主要构件：&nbsp;</P>
<P><BR>一个Web浏览器客户端，可能在也可能不在客户端组织的防火墙内&nbsp;<BR>一个HTTP服务器，是一个对公众开放的Web服务器。它通常位于一个称作DMZ的子网内&nbsp;<BR>Web容器主表示层和可能的业务逻辑构件&nbsp;<BR>应用程序容器主业务逻辑构件&nbsp;<BR>关系数据库管理系统（RDBMS）和数据库主数据、数据逻辑&nbsp;</P>
<P><BR>你使用的系统架构类型依赖于安全、性能和可靠性的需求，也依赖于组织的财政状况。在缺少经验的情况下，也可以适当地从一个修理厂电话订购一台简单地二手计算机。Internet上有许多开放源代码的操作系统、Web服务器、应用程序服务器和数据库管理系统。得到这些系统的代价只是几百美元和熬几个通宵。&nbsp;</P>
<P>象许多华尔街金融机构这样的高端客户也许需要一个连续支持安全、高吞吐量交易和不可预料网络通讯的系统。在这种情况下，为了容错，通常需要将Web服务器和应用程序服务器集群配置成一个n层架构。&nbsp;</P>
<P>还需要评估软件基础设施，包括Web服务器、安全管理软件、应用程序服务器、域名管理服务器、数据库管理系统和第三方软件构件。如果还没有购买应用程序服务器，选择一个J2EE供应商将是评估过程的一个重要方面。应该注意到不同的供应商对J2EE的实现程度是不同的，一些供应商只支持老的J2EE版本。另外，一些Web容器或应用程序容器可能比其他的速度要快。除了实现J2EE规范外，许多供应商还出售J2EE基础构件或框架。选择一个稳定的提供支持的J2EE供应商也非常关键。你可以在系统基础设施层面上购买或开发的通用功能包括：&nbsp;</P>
<P><BR>事务&nbsp;<BR>国际化和本地化&nbsp;<BR>集群和对象分布&nbsp;<BR>应用程序性能度量和剖析&nbsp;<BR>通讯&nbsp;<BR>工作流管理&nbsp;<BR>入口和个性化管理&nbsp;<BR>层对层通讯协议&nbsp;<BR>安全和防火墙&nbsp;</P>
<P><BR>应用架构&nbsp;</P>
<P>应用架构参考一个特定的项目和规范建立在企业级系统架构的上层。在基础设施完成后，架构师研究怎样构造一个特定的应用。如果你的企业级架构仅部分支持老的J2EE版本，可以先升级你的系统。如果由于预算或时间关系不能升级，那么必须在更老版本规定的技术范围内开展工作。虽然构造企业级重用构件非常重要，但是必须首先要能够使用。这里的最终目标是满足客户的需求--一次一个项目。&nbsp;</P>
<P>架构师不是设计师；架构和设计是完全不同。一个应用架构的范围包括系统的主要结构、架构设计模式和可以在上面增加构件的框架。架构主要关注的是非功能性方面，而设计关注应用业务用例将领域对象模型转换成技术对象模型。应用架构是项目的结构，一个特殊的应用程序。通过应用架构开发，你通常必须要做的应用架构决定包括：&nbsp;</P>
<P><BR>层之间进行功能划分&nbsp;<BR>领域对象建模&nbsp;<BR>要保护的遗留系统&nbsp;<BR>要购买的软件构件&nbsp;<BR>要开发的构件&nbsp;<BR>怎样集成第三方构件&nbsp;</P>
<P><BR>图3的订单领域对象说明了怎样对领域对象进行建模。利用当前的Java技术，可以将领域对象分布在作为开发者管理持续性对象的Web容器中、应用程序服务器的EJB中或者作为RDBMS宿主的Java存储过程中。&nbsp;</P>
<P>在宠物店蓝图中，我们将订单对象设计成一个实体bean，一个详细对象和一个数据访问对象，如图5和后面的图6所示。当你看到这个的时候，你应该意识到架构的重要性。为什么分析模型中的一个领域对象映射成这么多对象？如果改变设计，会出现什么问题？你也许听说过EJB的好处，但是要注意不同供应商的性能是不同的。当一种新技术到来的时候，你需要在投入全面设计之前进行一些研究。你可以经常地将设计和实现领域对象模型纵向联合部分的经验应用到其他许多领域对象中。这就是架构开发的内容。&nbsp;<BR></FONT></P></TD></TR>
<TR>
<TD align=right>
<SCRIPT language=JavaScript>
<!-- Begin
if (window.print) {
document.write('【<a href="#" onClick="javascript:window.print()"><font color=cc0000>打印本文</font></a>】 ');
}
// End -->
</SCRIPT>
</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/yesjoy/aggbug/29673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2006-02-06 11:25 <a href="http://www.blogjava.net/yesjoy/articles/29673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>