kaiyun官方注册
您所在的位置: 首页> 其他> 业界动态> 使用Avalon编程

使用Avalon编程

2008-12-27
作者:齐好宗

Avalon是以一定数量的为了提高代码质量、重用度和可维护性的核心的编程习惯和设计模式作为基础的。例如:面向服务编程(Service oriented Programming)、反向控制(Inversion of Control)和分离考虑(Separation of Concerns)等作为一个构建服务器端组件(server-side components)的框架。本文对如何使用Avalon框架编程作了简要介绍,希望能对进行服务器端开发的技术人员一些启示。
1. Avalon的重要子项目
为了让你更好的理解Avalon框架,下面简要的介绍以下它的重要子项目从而使你对Avalon整体框架有一个初步的认识。
1.1 Framework
Avalon Framework是Avalon大伞下的所有其它项目的基础。它定义了接口、契约(contracts)和Avalon的缺省实现。Framework将大部分工作置于其中,因此也是最为成熟的项目。
1.2 Excalibur
Avalon Excalibur是一组服务器端组件,您可以在自己的项目中使用它们。它包括了池(pooling)的实现、数据库连接管理和其它一些组件管理的实现。
1.3 Phoenix
Avalon Phoenix是服务器核心,它管理服务(Service,实现为服务器端组件,称作Block)的发布和执行。
1.4 Cornerstone
Avalon Cornerstone是一组Block或服务,这些Block可以布署在Phoenix环境中。这些Block包括了socket管理和Block之间的任务调度。
2.Avalon的原理和模式
Avalon框架中运用了许多新的编程观点和理念,下面一一的作介绍。
2.1反向控制(Inversion of Control,IOC)
反向控制的概念是指组件总是由外部进行管理的。这个短语是由Brian Foote在他的一篇论文中最先使用的(参看http://www.laputan.org/drc/drc.html)。组件所需的一切通过Contexts、Configurations和Loggers的方式赋予组件。实际上,组件生命周期中的每个阶段都是由创建组件的代码所控制的。当您使用这种模式时,就实现了一种组件与您的系统安全交互的方法
2. 2面向组件的编程(Component Oriented Programming ,COP)
面向组件的编程是把系统分割成一些组件或设施的一种思想。每种设施都有一个工作接口和围绕该接口的契约。这种方式允许容易地更换组件的实例,同时不影响系统其它部分的代码。面向对象" title="面向对象">面向对象编程(Object Oriented Programming ,OOP)和COP的主要区别在于集成的层次。COP系统的复杂性更容易管理,这得益于类之间更少的相互依赖。这提高了代码重用的程度。
COP的主要好处之一是修改项目代码的一些部分不会破坏整个系统。另一个好处是可以有某组件的多种实现,并可以在运行时刻进行选择。
2.3面向服务的编程(Service Oriented Programming ,SOP)
面向服务的编程的思想是把系统划分为由系统提供的一些服务。
Avalon的 Phoenix把每一种要提供的设施看作是一项服务,由特定接口和相关契约组成。服务的实现被称为Block。一个服务器程序是由多种服务组成的,认识这一点很重要。以邮件服务器为例,它会有协议处理服务、认证和授权服务、管理服务和核心邮件处理服务等。
Avalon的 Cornerstone提供了一些低层的服务,您可以在自己的系统中加以利用。提供的服务包括连接管理、socket管理、参与者/角色管理和调度等。我们在这里介绍到服务是因为它与把我们的假定系统分解为不同设施的过程有关。
3.用Avalon Phoenix开发服务器应用
Phoenix 是在Avalon Framework 之上的微内核设计和实现。它提供了一些工具用来管理服务器应用环境。这些工具包括日志管理,类装载(classloading),线程管理和安全。它的后续版本将有条件的支持额外工具,例如:中央服务管理" title="服务管理">服务管理,服务池和其他一些缩短产品进入市场时间的工具。Phoenix的API定义了汇集服务器组件和创建服务器的标准方法。
Phoenix默认的管理工具或者称之为引擎是利用Avalon Framework及基本设计原理和编程习惯建造而成的。JMX MBean 服务是Phoenix分布的一部分,用于管理Phoenix服务器内核及Phoenix应用程序" title="应用程序">应用程序。客户端" title="客户端">客户端不能通过RMI 适应器连接到MBean。
Phoenix应用程序称为SARs(服务器档案),它被配置在一个预配置的目录内。在运行SARs档案以前,Phoenix核心可以解包并验证档案的内容
下面介绍一个实际入门的类似Hello World的例子,该工程名为sckServer。进行开发前请首先到http://avalon.apache.org/ 下载所需的jar。工程是用ant组织的,该工程的目录结构如下图所示:

3.1 第一步:定义服务
在Avalon中,每一个组件一被选中或者由角色重新得到,它就和一个角色(role)相关联的。对于我们所定义的sckService服务,所有的角色接口如下:
package org.my;
public interface sckService
{ String ROLE="org.my.sckService";
public void postMessage(String msg);
}
3.2 第二步:实现服务
在Server类中实现了sckService接口。Avalon Framework则实现了几个生命周期以及线程接口的定义。尽管Avalon实现这些是不可见的,但运用的Scheduler和SocketManager组件却是Conerstone的一部分。
//导入一些必要的包。
public class Server extends AbstractLogEnabled
implements sckService, Block, Contextualizable, Composable, Configurable, Initializable, ConnectionHandlerFactory, ConnectionHandler
{ static protected Configuration CONFIGURATION;
protected SocketManager m_socketManager;
protected ConnectionManager m_connectionManager;
protected BlockContext m_context;
protected InetAddress m_bindTo;
protected int m_port;
public ConnectionHandler createConnectionHandler() throws Exception
{ final Server handler = new Server();
setupLogger( handler );
return handler;
}
public void initialize() throws Exception
{ ……
}
public void compose( final ComponentManager componentManager ) throws ComponentException
{ getLogger().info("Server.compose()");
m_socketManager = (SocketManager)componentManager.lookup( SocketManager.ROLE );
m_connectionManager = (ConnectionManager)componentManager.lookup( ConnectionManager.ROLE );
}
public void configure( final Configuration configuration ) throws ConfigurationException
{ ……
}
public void contextualize( final Context context )
{ m_context = (BlockContext)context;
}
public void handleConnection( final Socket socket ) throws IOException
{ DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = new DataOutputStream(socket.getOutputStream());
}
public void releaseConnectionHandler( ConnectionHandler connectionHandler )
{ }
public void postMessage( String fromUsername)
{ ……
}
}
3.3第三步:配置描述文件
由于篇幅所限,具体如何配置请参看http://avalon.apache.org/phoenix/可获得十分详细得信息。
3. 4打包为SAR文件
应用程序必须打包为SAR文件,Phoenix才可以读取。SAR文件中必须包括assembly.xml;config.xml和environment.xml三个配置文件。
3.5配置系统
将打好得sckServer.sar文件放置在phoenix的apps目录下,当phoenix启动时它会自动读取。
4 结束语
中国互联网络信息中心(CNNIC)《中国互联网络发展状况" title="发展状况">发展状况统计报告》表明,中国网民已经从1997年1月的62万人增至2003年1月的5910万人,另外我国上网计算机数、域名数、网站数等参数都有了较大的增长。互联网令人难以置信的飞速发展,带来了全新的生活、工作和学习方式。有网络就不可能没有服务,因而服务器端软件开发已经成为十分重要的话题。Avalon以其自身的优势必会引起世人的瞩目。由于篇幅所限,还有很多的内容不能一一介绍深表遗憾。
参考文献:
[1] http://avalon.apache.org ,Avalon官方网站
[2] http://www.oreillynet.com ,Oreilly’s 主页
[3] http://www-900.ibm.com/developerWorks/cn ,IBM中文开发者论坛

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map