Jakarta main

Avalon main

About


章节


原文链接


Printer Friendly


中文译者


介绍和概述

Avalon的简要历史以及创建它所有的设计原则概述

事情是从Apache JServ项目开始的。Stefano Mazzocchi和其它协助开发Apache JServ的人员认识到项目中所用到的一些模式很通用,足以用于创建一个服务器框架。 在1999年1月27日,星期三(在JServ 1.0b发布大约一个月后),Stefano拿出一份建议书,建议启动一个名为Java Apache Server Framework的项目。它的目标是成为Apache所有Java服务器代码的基础。想法是通过提供一个框架,将跨项目的一些组件和重用代码集中在一起。

Stefano Mazzocchi,Federico Barbieri和Pierpaolo Fumagalli创建了最初的版本。在2000年末,Berin Loritsch和Peter Donald参加到项目中来。那时,Pierpaolo和Stefano已转向其它项目的开发,Java Apache Server Framework开始被称为Avalon。这五个开发者是框架目前版本所使用的设计和概念的主要负责人。当前版本与2000年6月发行的版本非常相似。实际上,主要的区别是对包重新组织,以及将项目划分为子项目。同样的设计模式和接口今天依然存在。


什么是Avalon?

Avalon是五个子项目的父项目:Framework、Excalibur、LogKit、Phoenix、和Cornerstone。当听到Avalon时,大多数人会联想到Framework,但Avalon不止包括Framework。Avalon开始作为Java Apache Server Framework时就包含框架、工具、组件和一个服务器核心的实现,这些都在一个项目中。

因为Avalon的不同部分具有不同的成熟程度,发布周期也不同,我们决定将Avalon划分为前面提到的小项目。这样做也便于新开发者理解和学习Avalon的不同部分——这在以前几乎无法办到。

Framework

Avalon Framework是Avalon大伞下的所有其它项目的基础。它定义了接口、契约(contracts)和Avalon的缺省实现。Framework将大部分工作置于其中,因此也是最为成熟的项目。


Excalibur

Avalon Excalibur是一组服务器端组件,您可以在自己的项目中使用它们。它包括了池(pooling)的实现、数据库连接管理和其它一些组件管理的实现。


LogKit

Avalon LogKit是一个高速日志记录工具集,Framework、Excalibur、Cornerstone和Phoenix都用到它。它的模型与JDK 1.4 Logging package采用相同的原理,但与JDK 1.2+兼容。


Phoenix

Avalon Phoenix是服务器核心,它管理服务(Service,实现为服务器端组件,称作Block)的发布和执行。


Cornerstone

Avalon Cornerstone是一组Block或服务,这些Block可以布署在Phoenix环境中。这些Block包括了socket管理和Block之间的任务调度。


Scratchpad

Scratchpad并不是一个真正的正式项目,而是那些还没准备好放入Excalibur中的组件的一个临时区域。这些组件品质差别较大,它们的API也不保证会不变,直到它们被提升到Excalibur项目为止。



本概述的重点

在这个概述中,我们把重点放在Avalon Framework上,但会介绍足够的Avalon Excalibur和Avalon LogKit的相关知识,以便让您能够起步。我们将通过一个假想的业务服务器来展示如何在实践中使用Avalon。定义一个完整全面的方法学,或介绍所有子项目的方方面面超出了本概述的范围。

我们将重点放在Avalon Framework上是因为它是所有其它项目的基础。如果您能理解该框架,您就可以理解任何基于Avalon的项目。对于Avalon中常用的一些编程习惯结构(idiom),您也会逐渐熟悉。将重点放在框架上并涉及Avalon Excalibur和Avalon LogKit项目的另一个原因是它们是正式发布并被支持的。


Avalon可用在哪里?

我被问过好几次,要求阐明Avalon适合做什么,不适合做什么。Avalon把重点放在服务器端编程和让以服务器应用为中心的项目的设计和维护变得更容易。Avalon可被描述为一个包含了实现的框架。

尽管Avalon的重点是服务器端解决方案,很多人却发现对普通应用程序来说它也是有用的。Framework、Excalibur、和LogKit中使用的概念很通用,足以在任何项目中应用。将重点更直接放在服务器上的两个项目是Cornerstone和Phoenix。

Framework
  1. 一个支持性的或封闭性的结构

  2. 包含思想的一个基本系统或一种安排

N40008A

框架这个词在应用程序中的含义很广泛。重点放在单一行业的框架被称为垂直市场框架,例如医药系统或通信系统。原因是同样的框架不能胜任其它行业。具有很好通用性,可用于多个行业的框架被称为水平市场框架。Avalon是一个水平市场框架。您可以使用Avalon的Framework构建垂直市场框架。

用Avalon构建的最有说服力的垂直市场框架的例子是Apache Cocoon出版框架。Apache Cocoon第2版是使用Avalon的Framework、Excalibur和LogKit项目构建的。它利用了Framework中的接口和契约,让开发者能用更少的时间理解Cocoon是如何工作的。它也有效地利用了Excalibur提供的数据源管理和组件管理代码,这样它就不必重新发明轮子了。最后,它使用了LogKit来处理出版框架中所有的日志问题。

一旦您理解了隐藏在Avalon Framework后面的原理,您就能理解基于Avalon构建的任何系统。一旦您理解了系统,您将能更快地捕获因为误用框架所引起的缺陷。

不存在魔术公式

值得一提的是,任何试图使用某种工具作为成功的魔术公式的做法都是自找麻烦。Avalon也不例外。因为Avalon的Framework是为服务器端解决方案设计的,所以用它来构建图形用户界面(GUI)不是什么好主意。Java已经有了一个构建GUI的框架,称为Swing。

尽管您需要考虑Avalon是否适合您的项目,但您还是能从它的原理和设计中学到一些东西。您需要问自己的问题是:"项目将用在哪里?" 如果回答是它将运行在一个服务器环境中,那么Avalon将是一个好的选择,无论您是要创建一个Java Servlet或一个特殊用途的服务器应用。如果回答是它将运行在一个客户的机器上,并且与服务器没有交互,那么可能Avalon不太适合。即使如此,组件模型也是非常灵活,有助于在大型应用程序中对复杂性进行管理。



原理和模式

Avalon整个是基于一些特定设计原理来构建的。最重要的两个模式是反向控制(Inversion of Control)分离考虑(Separation of Concerns)。 Component Oriented Programming、Aspect Oriented Programming和Service Oriented Programming也对Avalon产生了影响。每种程序设计原理都可以写出数卷的书,但它们都是一些设计思维习惯。

反向控制

反向控制(Inversion of Control,IOC)的概念是指组件总是由外部进行管理的。这个短语是由Brian Foote在他的一篇论文中最先使用的N4000BF。组件所需的一切通过Contexts、Configurations和Loggers的方式赋予组件。实际上,组件生命周期中的每个阶段都是由创建组件的代码所控制的。当您使用这种模式时,就实现了一种组件与您的系统安全交互的方法。

IOC与安全性并不等价! IOC提供了一种机制,允许你实现一个可扩展的安全模型。为了让一个系统真正做到安全,每个组件都必需安全,没有组件可以修改传递给它们的对象的内容,而且所有的交互都必须使用已知的实体。安全性是一个主要问题,IOC是程序员工具库中的一种工具,用于实现安全性的目标。


分离考虑

您应该从不同的思考方向来看待您的系统,这一思想导致了分离考虑(Separation of Concerns,SOC)模式N4000D8。 一个例子是从同一个问题空间的不同视角来看一个web服务器。web服务器必需安全、稳定、可管理、可配置并满足HTTP规范。每种属性都是一个单独的考虑范围。这其中的某些考虑与其它考虑相关,如安全性和稳定性(如果一个服务器不稳定,它就不可能安全)。

分离考虑模式又导致了Aspect Oriented Programming (AOP) N4000E5。研究者发现许多考虑不能在类或方法的粒度上进行处理。这些考虑被称为aspect。aspect的例子包括管理对象的生命周期、记日志、处理异常和清理释放资源等。由于没有一种稳定的AOP实现,Avalon开发团队选择通过提供一些小的接口,然后由组件来实现,从而实现aspect或考虑。


面向组件的编程

面向组件的编程(Component Oriented Programming ,COP)是把系统分割成一些组件或设施的一种思想。每种设施都有一个工作接口和围绕该接口的契约。这种方式允许容易地更换组件的实例,同时不影响系统其它部分的代码。面向对象编程(Object Oriented Programming ,OOP)和COP的主要区别在于集成的层次。COP系统的复杂性更容易管理,这得益于类之间更少的相互依赖。这提高了代码重用的程度。

COP的主要好处之一是修改项目代码的一些部分不会破坏整个系统。另一个好处是可以有某组件的多种实现,并可以在运行时刻进行选择。


面向服务的编程

面向服务的编程(Service Oriented Programming ,SOP)的思想是把系统划分为由系统提供的一些服务。

服务
  1. 为其它人执行的工作或职责

  2. 提供修理或维护的一种设施

  3. 向公众提供工具的一种设施

N400121

Avalon的 Phoenix把每一种要提供的设施看作是一项服务,由特定接口和相关契约组成。服务的实现被称为Block。一个服务器程序是由多种服务组成的,认识这一点很重要。以邮件服务器为例,它会有协议处理服务、认证和授权服务、管理服务和核心邮件处理服务等。

Avalon的 Cornerstone提供了一些低层的服务,您可以在自己的系统中加以利用。提供的服务包括连接管理、socket管理、参与者/角色管理和调度等。我们在这里介绍到服务是因为它与把我们的假定系统分解为不同设施的过程有关。



N40008A) Webster's II New Riverside Dictionary
N4000BF) http://www.laputan.org/drc/drc.html
N4000D8) http://www.research.ibm.com/hyperspace/MDSOC.htm
N4000E5) http://www.aspectj.org
N400121) Webster's II New Riverside Dictionary


Copyright ?999-2002 by the Apache Software Foundation. All Rights Reserved.