多层技术架构JAVAWord文档格式.docx
《多层技术架构JAVAWord文档格式.docx》由会员分享,可在线阅读,更多相关《多层技术架构JAVAWord文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
中间件层主要是网客通平台使用的J2EE中间件,包括平台使用到的应用服务器和中间件技术。
一、应用服务器
应用服务器为网客通提供的整个J2EE平台实现,EMALL基础服务层和应用层、业务层都是建立在应用服务器之上。
网客通设计上遵循SUN公司提出的J2EE规范,这样能够尽可能的保证在不同的J2EE应用服务器中进行移植。
经过测试、网客通平台支持Tomcat、WebLogic、JBoss这几种J2EE应用服务器。
二、中间件技术
本着重用的设计原则,网客通在一些功能中采用了已有的成熟技术,这些都是经过实践考验的中间件。
主要以java标准包和开源项目为主,大部分都针对系统作了相应调整,以便适合系统的需要。
1.Apachecommons:
著名的开源组织Apache的一个java工具包,提供很多实用的功能。
1)commons-beanutils:
提供对Java反射和自省API的包装。
在平台中用于通用的接口设计。
2)commons-codec:
包含一些通用的编码解码算法。
Hex,Base64,以及URLencoder。
平台中主要用来做消息摘要,实现数据加密等功能。
3)commons-collections:
提供一个类包来扩展和增加标准的JavaCollection框架。
提供了比j2sdk更全面的数据结构,平台中继承并实现了一些特殊的数据结构。
4)commons-pool:
提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池。
我们在原有的基础上进行了优化,在性能和使用性方面有所提高。
5)commons-dbcp:
这是一个基于apache的对象池(apachecommonspool)实现的数据库连接池。
我们在原有的基础上进行了优化,对数据库连接进行了特别的处理,防止数据库连接泄漏的问题,并提供了监控的功能。
6)commons-discovery:
供工具来定位资源(包括类),通过使用各种模式来映射服务/引用名称和资源名称。
7)commons-el:
提供在JSP2.0规范中定义的EL表达式的解释器。
对平台中的JSP提供EL表达式支持。
8)commons-fileupload:
强大和高性能的文件上传功能。
平台中被用于上传各种图片、Flash、文档等资源,我们在原有的基础上进行了优化。
9)commons-logging:
提供通用的日志操作接口。
主要用于程序调试和服务器日常的日志输出。
10)commons-validator:
提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器(校验方法)和校验规则。
支持校验规则的和错误消息的国际化。
平台中用来校验各种xml数据。
2.Cewolf/JFreeChart:
Cewolf是一个用于生成各种图表的标签库。
它支持在JSP中嵌入图表图片。
运行servlet容器的任意的Web应用程序服务器都可以使用它。
因为Cewolf是一个功能完整的标签库,所以不需要使用Javascript。
JFreeChart是开放源代码站点SourceF上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:
饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
这些不同式样的图表基本上可以满足目前的要求。
主要用于生成统计图表。
这两个技术一起提供了网客通平台的统计分析图表,JFreeChart主要用于输出图表,Cewolf对其进行了封装。
3.Dom4j:
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
主要用来处理XML数据。
XML在网客通有广泛的应用,主要是作为配置文件使用。
由于XML严格的格式要求和层次结构,也有用来作为参数在HTML表单中传递。
如组合商品功能,因为组合商品中的商品是由管理员挑选的,参数数量并不确定,如果每从组合商品中添加/删除一个商品都直接更新到数据库话,会对系统造成负荷。
所以,在组合商品的管理中,将操作的数据类转换成XML传递,就可以一次进行修改。
4.Hibernate:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
在平台中,我们采用Hibernate进行数据库操作,只有在一些对数据库性能有特别要求的模块,才直接使用jdbc进行连接。
5.Ehcache:
Ehcache出自Hibernate,在Hibernate中使用它作为数据缓存的解决方案。
这是Hibernate必须的包。
6.JCrontab:
它是由Java语言编写的日程处理程序,它目的是提供强大的定时处理功能,让我们的应用程序可以按照提供的时间表来执行不同的应用。
我们主要用Jcrontab管理以下一些定时任务:
1)年排行榜后台更新进程:
自动计算年排行榜。
2)月排行榜后台更新进程:
自动计算月排行榜。
3)周排行榜后台更新进程:
自动计算周排行榜。
4)日排行榜后台更新进程:
自动计算日排行榜。
5)更新对象缓存:
实现对象缓存的更新,处理那些长期没被再一次访问的对象缓存。
6)清页面缓存:
当管理员使用的手工刷新页面缓存的功能时,系统会将这些需要刷新的缓存加到一个队列中,由本进程负责刷新。
7)相关产品自动实现间隔:
相关产品的计算对系统消耗比较大,所以系统不会对所有几十万个商品进行计算,只有在用户查看单个商品时算出这个商品的相关产品并进行缓存。
那么当用户下一次访问这个商品的相关产品时就直接从缓存中读取出来。
而这个进程就是为了定时更新这个缓存。
8)自动推荐后台更新进程:
进程根据商品推荐规则进行自动推荐。
9)新闻推荐后台更新进程:
进程根据新闻推荐规则进行自动推荐。
10)关键字后台进程:
当用户在前台搜索栏中输入一个查询值时,系统并不马上将其统计到关键字,而是放到内存中,由此进程定时统计。
11)保存访问量信息进程:
用户每访问一次系统,系统并不马上统计,而是放到内存中,由此进程定时保存到数据库,供统计进程进行统计。
12)年访问量排行计算:
计算年访问量排行榜。
13)月访问量排行计算:
计算月访问量排行榜。
14)周访问量排行计算:
计算周访问量排行榜。
15)日访问量排行计算:
计算日访问量排行榜。
16)年降价排行计算:
计算年降价排行榜。
17)月降价排行计算:
计算月降价排行榜。
18)周降价排行计算:
计算周降价排行榜。
19)日降价排行计算:
计算日降价排行榜。
20)统计计算:
每天对访问量进行统计。
21)生成订阅邮件列表进程:
根据用户的订阅设置,生成需要发送的邮件队列。
22)发送订阅邮件进程:
根据要发送的邮件队列发送邮件。
23)拍卖自动出价进程:
实现拍卖模块中的自动出价功能。
7.JCS:
JCS是Jakarta的项目Turbine的子项目。
它是一个复合式的缓冲工具。
可以将对象缓冲到内存、硬盘。
具有缓冲对象时间过期设定。
还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。
对于一些需要频繁访问而每访问一次都非常消耗资源的对象,可以临时存放在缓冲区中,这样可以提高服务的性能。
而JCS正是一个很好的缓冲工具。
缓冲工具对于读操作远远多于写操作的应用性能提高非常显著。
网客通平台中使用jCS提供缓存功能,主要是页面缓存和对象缓存,通过JCS,系统将用户访问过的页面和对象缓存到内存中,对于访问量巨大,内存缓存已经不能负荷的情况下,我们还可以将缓存设置到硬盘中保存。
使用缓存的话,能将系统可负载和性能大幅度的提升。
当没有使用集群环境的情况下,缓存是一种必不可少的技术。
8.JSF/MyFaces:
JavaServerFaces(JSF)是一种用于构建Web应用程序的新标准Java框架。
它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。
JSF的主要优势之一就是它既是JavaWeb用户界面标准又是严格遵循模型-视图-控制器(MVC)设计模式的框架。
用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使JSF应用程序更易于管理。
为了准备提供页面对应用程序数据访问的JSF上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”servlet(控制器)来处理。
MyFaces是JavaServerFaces(JSF)Web框架(JSR127)的一个实现。
提供了很多常用控件。
我们平台中采用一些基于JSF框架的MyFaces控件。
这样使程序结构十分清晰。
9.Log4j:
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;
我们也可以控制每一条日志的输出格式;
通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
这是一个可选包,如果不使用Log4j的话,commons-logging会自动使用SUNJ2SDK的日志包,不过我们还是推荐使用Log4j,它的功能非常强大。
10.Lucene:
Lucene是一个开放源程序的搜寻器引擎,利用它可以轻易地为Java软件加入全文搜寻功能。
Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自已需要自订其功能。
我们使用Lucene建立索引,并在这基础上实现了全文搜索功能。
11.Ant:
Ant是一个基于Java的自动化脚本引擎,脚本格式为XML。
我们除了用Ant做Java编译相关任务外,还通过插件实现很多应用的调用。
包括程序编译、打包、Hibernate配置文件自动生成、部署、以及单元测试等操作。
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。
在Java中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,Ant本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。
除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。
12.Axis:
Axis是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。
SOAP是被广泛作为新一代跨平台、跨语言分布计算WebServices的重要部分。
网客通平台使用Axis提供WebService支持,广泛应用于通用数据接口,对外系统提供服务等功能。
如:
1)商品查询服务:
提供接口让外接系统可以查到平台中的商品信息。
2)新闻发布服务:
提供接口让外接系统可以取到各类新闻。
3)订单服务:
提供接口让外接系统可以在平台中生成订单,并获取各种订单信息。
注:
上述服务都有严格的权限控制。
13.JavaMail:
JavaMail是Sun发布的用来处理email的API。
它可以方便地执行一些常用的邮件传输。
我们使用JavaMail实现了平台中邮件发送、群发等相关功能,供业务系统使用。
14.XDoclet:
XDoclet是一个开源项目,可以通过在java源代码中的一些特殊的注释信息,自动生成配置文件、源代码等等。
例如web、ejb的部署描述文件等。
我们用XDoclet来生成Hibernate的hbm配置文件。
15.JSTL:
JSP标准标记库(JSPStandardTagLibrary,JSTL)是一个实现Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML操作以及数据库访问。
我们使用JSTL封装各种业务逻辑。
16.JakartaORO:
JakartaOROJava类是一套文本处理Java类,提供了与Perl5兼容的规则表达式,类AWK规则表达式,glob表达式,以及用于执行替换、分割、过滤文件名等的工具。
这个包是OROMatcher,AwkTools,PerlTools,andTextToolslibrariesoriginallyfromORO,Inc的后续产品。
网客通平台使用ORO处理正则表达式,广泛应用于各种文本处理中。
17.SwarmCache/JGroups:
SwarmCache是一个简单且有效的分布式缓存,它使用IPmulticast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。
SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
SwarmCache使用JavaGroups来管理从属关系和分布式缓存的通讯。
JGroups是一个开源的纯java编写的可靠的群组通讯工具。
其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。
其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。
这种协议栈可以让用户定义的自己可靠性指标和性能指标。
当使用集群环境时,系统存在着缓存同步的问题,需要对集群中每一台服务器的缓存进行同步,这样就必须要有一个缓存同步的机制,SwarmCache和JGroups就是为了解决这个问题而被加到网客通中。
18.JUnit:
JUnit是由ErichGamma和KentBeck编写的一个回归测试框架(regressiontestingframework)。
Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
我们主要用JUnit来进行单元测试。
三、基础服务层
基础服务层构建于J2EE平台之上,借助于中间件的接口服务,提供电子商务平台系统所需要的通用服务接口组件。
系统将提供以下主要的服务接口支撑不同业务需求的实现。
◆栏目管理模块:
栏目是一个抽象资源对象,是一种特殊的内容类型。
栏目可以表示产品、新闻信息类别、资源节点、导航栏的项、菜单中的项等等。
栏目是一种组织管理型的资源。
系统设计上支持多级子栏目,采用虚拟文件系统(VirtualFileSystem)技术以支持直观的树型导航风格,一个栏目节点相当于一个虚拟的文件目录。
对于大型电子商务系统,栏目的节点是个非常大的数字,这对系统栏目树展示的速度和性能有极高要求。
考虑到以上原因系统采取了栏目对象缓存策略,同时对于页面节点的呈现通过动态JavaScript输出的技术,从而使系统能很好的支持上万个栏目数据节点操作管理。
能平滑、高效的展示树型风格的栏目结构。
◆用户权限管理模块:
大型电子商务应用系统有用户多,模块多,权限多的特点,因此必须采用分组的用户管理系统,并设置一个具有最高权限的管理员,负责对整个系统用户设置,为每个用户角色、用户指定不同的权限,依照不同的权限在系统中可以使用不同的功能。
系统设置了Administrator用户组,并设置了root这个具有最高权限、不可删除的用户。
您可以根据您的需要使用root这一个管理员用户。
管理员可以创建、编辑和删除用户组,您可以根据您的需要给每个用户组合理的权限划分,并给每个用户组添加、编辑和删除用户。
用户登录系统后,系统会根据该用户的权限提供相应的功能,并对用户的每个操作检查用户的使用权限。
系统采用Window用户权限的思想,将用户、用户组的权限通过各个栏目节点进行绑定,在各个栏目节点上实现继承与非继承的设置管理,从而使管理员可以进行灵活的配置。
◆属性管理模块:
在现实情况中,不同的事物对象存在其特殊的信息描述;
比如一个手机,存在“网络类型—GSM”、“外观样式—翻盖”等等;
同时这些特殊的信息描述在同类别的数据对象下经常存在共性;
比如TCL和联想生产的手机,应该都存在以上两种属性的描述。
针对以上的情况,系统进行了一个数据抽象,定义了一套属性管理组件,可以方便、有效的描述相关的需求情况,同时对于存在共性描述的对象采用继承模式来描述,从而很好的表现一个事物对象的特征。
◆继承性管理模块:
继承是面向对象接口特性之一。
考虑到抽象事物的通用性,系统通过一个通用的对象继承模型接口,对所有需要实现继承的功能提供基础的支持。
从而提高系统的重用性和降低系统的偶合度。
◆日志服务管理模块:
日志是一个成熟的电子商务应用系统所必备的功能。
日志可以用于数据统计,为系统其他功能提供初始数据;
用于查看一个对象的修改历史记录,用于方便追踪对象的修改状态和明确事务责任。
通过对系统各种操作数据的分析,根据各操作功能,系统将日志进行类别的划分:
1、系统日志:
记录系统各种操作的信息数据。
(比如:
用户某个时间登陆了系统……)
2、商品日志:
记录系统商品数据发生改变的信息。
商品价格发生变化)
3、信息日志:
记录系统信息数据发生改变的信息。
某管理员增加了一个新的促销公告……)
4、订单日志:
记录系统订单数据发生改变的信息。
某个订单已经进行了送货处理……)
系统通过抽象出一个Log日志接口,采用AbstractFactory模式,通过不同的构造参数来获取不同分类的Log日志实现。
系统将各中类别下的日志,又区分不同的操作。
日志组件将通过抽象和封装后,给各功能模块提供统一接口服务,方便系统各模块的日志功能的开发和维护。
◆缓存服务管理模块:
页面访问的时候,生成动态Web页会耗用各种各样的系统资源。
当Web服务器收到页面请求时,它通常必须从数据库或其他存储系统中实时的检索所请求的信息。
对这些资源的访问通常需要通过有限的资源池(如数据库连接、套接字或文件描述符)进行。
因为Web服务器通常需要处理很多并发请求,所以对这些共享资源的争夺可能会延迟页面请求,直到资源变为可用。
在将请求发送后,仍然必须将结果转换为HTML代码以便进行显示。
使系统速度更快的一种显而易见的方法是购买更多、配置更好的硬件。
此方法可能很吸引人,因为硬件便宜,而且不必更改程序,但更多的硬件只能在未达到其物理限制之前才会对性能有所帮助。
系统中实施缓存管理,是一个有效的解决方案。
系统中存在两中缓存对象:
1、Java对象缓存:
对于一些经常被使用的Java对象保存于规定的内存空间,通过配置的更新规则,同步更新数据库内容。
2、前台页面缓存:
对于前台的html页面按不同的块来区分,然后通过一个key对象,通过开源JCS技术存储于内存或磁盘空间。
(请求中的页面对象不在缓存对象中)
(请求中的页面对象存在于缓存对象中)
从上边两幅图可以很清晰的看到,对于并发访问的页面请求,通过页面的缓存可以极大的减少对紧缺资源(数据库连接)的调用,减少访问响应的时间,从而提高系统的访问速度和整体性能。
◆集群模块:
集群目标:
1、支持更大的访问量,并且可以随着访问量的增加可以通过增加服务器的方式很容易的增加处