队列管理器:它负责Concordia系统中Agent的时序安排和可能重试的行为。包括在Agent等待时机以完成工作时对它们进行维护,在Agent进入或离开系统时维持它们的持续性状态,并在Concordia系统从网络中断开时进行必要的重试。它为Agent登陆到Concordia节点后的执行提供了排序和管理的机制。其主要任务包括:

  l 为Agent在不可靠网络之上提供可靠的传输;

  2 提供基本的存储和转发操作。

  持续性管理器;它维持着Agent在网络上迁移时的状态。而且,它考虑到了在系统失败情况下Agent的检查点和再启动(由于程序或系统故障,一个程序被终止以后,使它在某个中间位置而不是在开始位置重新开始执行的一种程序。一次再启动可以在检查点开始或从一个作业步开始,并且使用检查点记录以便重新将系统初始化)。其操作在一般情况下都是透明的,也是说,根本无须Agent或者Administrator的控制。其包括的主要功能有:

  l 为Agent和其他一些Object的持续性提供必要的支持;

  2 使得系统在崩溃之后的重新启动中能够准确地重新启动Agent和各种服务。

  事件管理器:它管理着发送给Agent或从Agent发出的注册和通知等事件。它能够在Concordia网络上把事件传递给网络中其他节点上的Agent,它和Concordia一起根据需要发布事件。其主要功能有:

  l 为Agent之间的协作提供相应支持;

  2 为Agent之间的事件传送提供支持;

  3 实现事件的多点传送,即多个接收者接受一个事件。

  目录管理器:它的主要责任是提供统一的命名服务,使得Agent能够在网络上找到所需的服务。Administrator可以根据设计人员或者服务的需要以多种途径来设定名字服务。

  安全管理器:它负责识别用户,鉴别他们的Agent,保护服务器的资源并确保Agent及其数据对象在迁移中的安全和完整。它也负责控制Agent对其所需Java类库的动态加载。它拥有一个用户界面构件,能够通过该界面来配置和监控Concordia所知的各用户和服务的安全属性。其关键功能包括:

  l 执行相应的鉴定:确保能够识别出Agent来自何处以及到底是谁在执行它;

  2 执行访问控制:确保服务器的资源不受恶意的或者错误Agent的攻击;

  3 加密:防止Agent被假冒和篡改。

  服务接口(Service Bridge):它为开发人员提供了一种机制,使得开发出来的Agent在迁移到某一个服务器时,能够在该服务器增加一些有关的服务,为Agent的执行提供有效的支持,这些增加的服务可以在DirectoryManager上完成相应的注册。它的一个主要的用途是使得Agent能够访问目的服务器上的各种本地服务。它可以通过远程管理API来执行远程的管理。

  除此之外,Concordia还为开发人员提供了大量开发Agent 的应用所需的类库(Agent tools Library),使得Agent的设计人员无须过多了解网络的细节和编制相关的代码,极大的方便了开发人员。

  三、Concordile中Mobile Agent的迁移

  Mobile Agent的迁移与分布式对象的交互及Java Applet的下载有着很大的不同。在基于CORBA或DCOM的分布式对象系统中,一个对象能够通过网络远程地调用其他对象的方法。但是,在两个对象的交互过程,没有任何一个是移动的。WWW中Applet的下载也仅是提供了一种从Web服务器把代码下载到Web浏览器的机制,并没有为相应状态信息的迁移提供任何机制。可以说一个Applet本质上并不是从服务器上迁移到浏览器上的,而仅仅是代码的下载,象HTML页面的下载一样,因为下载的代码将创建一个对象,一旦该Applet被创建,它只能呆在该浏览器上而不能移动。而Mobile Agent的迁移则不同,它在迁移的过程中不但携带着相应的代码,也将携带着有关的状态信息,如图二所示[3],另外,Mobile Agent还能根据用户的要求在网络上进行多次迁移。

  在Mobile Agent的迁移过程中,其迁移计划是由路线来决定的。例如表1定义了一个Mobile Agent的路线。根据该路线,该Mobile Agent将首先到达服务器Server1,在该服务器上执行方法method1;然后迁移到服务器Server2并执行方法method2;后迁移到服务器Server3,执行方法method3。

  在Concordia中,路线是一个完全独立于Mobile Agent的数据结构,在Mobile Agent的执行过程中,将在一个相对独立的地方对该Mobile Agent的迁移进行管理。这种模式能够为Mobile Agent迁移的定义和跟踪提供十分简单的机制。而且,系统还能够允许Mobile Agent在执行过程中更改它们的路线,从而大大提高了灵活度。