一、简介
在分散式计算的 域中,有许多解决不同问题的技术,像是我们可以透过 RPC或RMI来使用固定在远端工作站上的函式,并且藉由讯息传递( message-passing)的方式来传送资料,以协调整个分散式计算;也可以利用mobile agents的特性 - 穿梭在网路许多工作站并执行各种特定任务,来做搜寻远端工作站上的目录资讯、更新档案、计算统计资料、或者与其他 agents沟通等工作。目前关於发展後者mobile agents系统的开发平台或执行环境有 Telescript、Agent Tcl、Ara(Agents for Remote Access )、以及Aglet等。
Aglet是由日本IBM 公司所提出,完全用Java发展的 mobile agent技术,并提供实用的平台-Aglets Workbench让我们开发或执行mobile agent系统。 Aglet 这个字是由"agile" 与"applet"两个字所合成的,简单的说就是具有agent行为的Java applet物件。它以执行绪( thread)的型态被产生於一台工作站,可随时暂停执行的工作,而後整个 aglet物件被分派到另一台工作站上,再重新启动执行任务。也因为aglets 是执行绪的型态,所以不会消耗太多的系统资源。以下将为读者介绍Aglet 的系统架构、Aglet 的物件模型( object model)与 packages、以及 Aglets Workbench 的元件。
二、架构
Aglets的系统架构主要分为四个阶段,请参见图1。首先当一个正在执行的 aglet想要将自己外送到远端时,会对 Aglets Runtime层发出请求,然後 Aglets Runtime层把aglet 的状态资讯与程式码转成序列化(serialized )之位元组阵列( byte array );接著若是外送的请求成功时,系统会将 aglet的执行动作结束,然後将位元组阵列传送至ATCI( Agent Transport and Communication Interface)层处理,此层提供使用ATP (Agent Transfer Protocol)的介面,其中ATP为一个简单的应用层协定 ( application-level protocol)(请参见图2),它使得我们不 顾虑aglets是否被派送到不同的 agent系统就可以传送aglets(也就是 agent-system-inde pendent);之後,系统会将位元组阵列附上相关的系统资讯,像是系统名称以及aglet的id等,并以bit stream 透过网路传至远端工作站[1] 。
|
图一、 Aglet的系统架构下图
|
|
图 2. ATP 的示意图
|
三、API包说明
Aglet系统首先 提供一个「环境」( context)来管理 aglet的基本行为:像是「产生」( create)、「复制」(clone)aglets ,或「分派」( dispatch)aglets 到远端工作站、「召回」(retract)远端的aglets,或「暂停」( deactive)、「唤醒」(active) aglets,以及「移除」(dispose) aglets等,请参见图 3。而aglet与aglet 之间的沟通,可用讯息传递的方式来传递讯息物件( message object)。此外,基於安全上的顾虑,aglets 并非让外界直接存取其资讯,而是透过一个代理者( aglet proxy)提供一致的介面与外界沟通,请参见图4。这样做还有一个好处 - aglet的所在位置会透明化( location transparency),也就是若想要与远端的aglet沟通时,只 在本地主机( local host)的 context上产生对应远端aglet的代理者,并与此代理者沟通即可,不必直接处理网路连线与通讯的问题[1] 。
|
图 3. Aglet的物件模型
|
|
图4. Aglet 基本功能介面
|
Aglet的packets包括如下:
- com.ibm.aglet:这个packet定义aglet 的基本元件之类别:Aglet、AgletID 、AgletInfo、 AgletStub、 FutureReply、 Message、ReplySet ,以及介面: AgletContext、 AgletProxy、 MessageManager。
- com.ibm.aglet.eve nt:Aglet的事件驱动模式分成Clone、 Mobility、 Persistency三种,其中Clone事件产生於复制aglets, Mobility事件产生於分派或取回 aglets等, Persistency事件产生於暂停或唤醒 aglets。
- com.ibm.aglet.sys tem:主要提供控制 context的介面。
- com.ibm.aglet.uti l:包括一些常用的物件,像是 AddressBook、 AddressChooser、 ImageData等。
- com.ibm.agletx.pa tterns:将常用的系统架构design patterns,例如 Master-Slave、 Messenger-Receive r、以及 Notifier-Notifica tion。
四、Aglets Workbench
Aglets Workbench 目前提供的元件包括如下[2] :
- The Aglets Framework for mobile Java agents: 提供一些特定的mobile agent之元件,以及常用的设计架构。
- The Agent Transfer Protocol (ATP)
- Tahiti: 视觉化的管理介面,让使用者更方便管理 aglets。
- Fiji: 它是独立的 package,提供在 web上透过Fiji applets来执行 aglet contexts,以做到产生、分派、召回aglets的功能。
五、范例说明
在此列举一简单之范例(请参见图 5、表 1、表 2):我们在本地工作站上产生一个LocalHost aglet,此aglet会动态产生一个新的 Hello aglet,然後将Hello aglet派送到远端工作站上执行,也就是列印 "Hello!"讯息。
首先说明LocalHost aglet: 在此程式中只有run()这个成员函数,是此aglet 执行绪本身进入执行状态的进入点。接著为了要动态产生一个新的aglet,必须透过 AgletContext来产生,并传回新的 aglet之proxy。然後透过proxy将新的 aglet派送到指定的远端工作站。
然後是Hello aglet : 在这个程式中有 run()和 onCreation()两个成员函数,其中 onCreation()会在本身aglet产生时被执行,先做一些初始化的动作,在此加入 MobilityListener( )这个介面,当有 Mobility事件发生时,即会执行适当的方法(method)。也就是说,若此 Hello aglet被分派时, MobilityListener( )会收到系统产生的 Mobility事件,然後执行 onDispatching()。接著进入run()函式,首先用一个布林变数判断本身是否在本地主机上。若不是则会印出" Hello!"讯息。
|
图 5. 范例程式的作用关系图
|
表 1. LocalHost.java
import com.ibm.aglet.*;
import java.net.*;
public class LocalHost extends Aglet{
public void run(){
URL codeBase; //被create的aglet之class path。
Object init; //传给被create的aglet之初始物件参数。
try{
// Create Hello aglet并取得其proxy。
AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);
try{
proxy.dispatch(new URL("atp://remotehost"));
// 分派aglet到远端的主机。
}
catch(MalformedURLException e){
System.out.println(e);
}
}
catch(Exception e){}
}
}
|
表 2. Hello.java
import com.ibm.aglet.*;
import java.net.*;
public class LocalHost extends Aglet{
public void run(){
URL codeBase; //被create的aglet之class path。
Object init; //传给被create的aglet之初始物件参数。
try{
// Create Hello aglet并取得其proxy。
AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);
try{
proxy.dispatch(new URL("atp://remotehost")); // 分派aglet到远端的主机。
}catch(MalformedURLException e){
System.out.println(e);
}
}catch(Exception e){}
}
}
|
六、参考资料
-
-
[1] Mitsuru Oshima and Guenter Karjoth, "Aglets Specification (1. 0)," http://www.trl.ibm.co.jp/aglets/spec_version10.html, May 20th, 1997.
-
[2] Danny B. Lange and Daniel T. Chang," IBM Aglets Workbench White Paper," http://aglets.trl.ibm.co.jp/documentation.html , September 9, 1996.
-
[3] Chong Xu and Dongbin Tao, "Building Distributed Application with Aglet," http://www.cs.duke.edu/~chong/aglet/, 1997.
-
[4] Danny B. Lange and Mitsuru Oshima, "Programming and Deploying Java Mobile Agents with Aglets," ISBN: 0-201-32582-9, 1998.
|