📄 0090.htm
字号:
<html>
<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>Aglet(Mobile Agent) </strong></big></p>
<div align="right">---(文/王静翊)</div>
<TABLE width="90%">
<TBODY>
<TR>
<TD class=page><A name=one>一、简介</A> <BR>
<P>在分散式计算的 域中,有许多解决不同问题的技术,像是我们可以透过 RPC或RMI来使用固定在远端工作站上的函式,并且藉由讯息传递(
message-passing)的方式来传送资料,以协调整个分散式计算;也可以利用mobile agents的特性 -
穿梭在网路许多工作站并执行各种特定任务,来做搜寻远端工作站上的目录资讯、更新档案、计算统计资料、或者与其他
agents沟通等工作。目前关於发展後者mobile agents系统的开发平台或执行环境有 Telescript、Agent
Tcl、Ara(Agents for Remote Access )、以及Aglet等。 </P>
<P>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 的元件。 </P><A name=two>二、架构</A> <BR>
<P>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] 。 </P>
<TABLE>
<TBODY>
<TR>
<TD><IMG src="images/aglet_f1.gif"> </TD></TR>
<TR>
<TD>
<CENTER>图一、 Aglet的系统架构下图</CENTER></TD></TR></TBODY></TABLE>
<TABLE>
<TBODY>
<TR>
<TD><IMG src="images/aglet_f2.gif"> </TD></TR>
<TR>
<TD>
<CENTER>图 2. ATP 的示意图</CENTER></TD></TR></TBODY></TABLE><A
name=three>三、API包说明</A> <BR>
<P>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] 。 </P>
<TABLE>
<TBODY>
<TR>
<TD><IMG src="images/aglet_f3.gif"> </TD></TR>
<TR>
<TD>
<CENTER>图 3. Aglet的物件模型 </CENTER></TD></TR></TBODY></TABLE>
<TABLE>
<TBODY>
<TR>
<TD><IMG src="images/aglet_f4.gif"> </TD></TR>
<TR>
<TD>
<CENTER>图4. Aglet 基本功能介面</CENTER></TD></TR></TBODY></TABLE>
<P>Aglet的packets包括如下: </P>
<UL>
<LI>com.ibm.aglet:这个packet定义aglet 的基本元件之类别:Aglet、AgletID 、AgletInfo、
AgletStub、 FutureReply、 Message、ReplySet ,以及介面: AgletContext、
AgletProxy、 MessageManager。 </LI></UL>
<UL>
<LI>com.ibm.aglet.eve nt:Aglet的事件驱动模式分成Clone、 Mobility、
Persistency三种,其中Clone事件产生於复制aglets, Mobility事件产生於分派或取回 aglets等,
Persistency事件产生於暂停或唤醒 aglets。 </LI></UL>
<UL>
<LI>com.ibm.aglet.sys tem:主要提供控制 context的介面。 </LI></UL>
<UL>
<LI>com.ibm.aglet.uti l:包括一些常用的物件,像是 AddressBook、 AddressChooser、
ImageData等。 </LI></UL>
<UL>
<LI>com.ibm.agletx.pa tterns:将常用的系统架构design patterns,例如 Master-Slave、
Messenger-Receive r、以及 Notifier-Notifica tion。 </LI></UL><A
name=four>四、Aglets Workbench</A> <BR>
<P>Aglets Workbench 目前提供的元件包括如下[2] : </P>
<UL>
<LI>The Aglets Framework for mobile Java agents: 提供一些特定的mobile
agent之元件,以及常用的设计架构。 </LI></UL>
<UL>
<LI>The Agent Transfer Protocol (ATP) </LI></UL>
<UL>
<LI>JDBC for DB2 </LI></UL>
<UL>
<LI>Tahiti: 视觉化的管理介面,让使用者更方便管理 aglets。 </LI></UL>
<UL>
<LI>Fiji: 它是独立的 package,提供在 web上透过Fiji applets来执行 aglet
contexts,以做到产生、分派、召回aglets的功能。 </LI></UL><A name=five>五、范例说明</A> <BR>
<P>在此列举一简单之范例(请参见图 5、表 1、表 2):我们在本地工作站上产生一个LocalHost aglet,此aglet会动态产生一个新的
Hello aglet,然後将Hello aglet派送到远端工作站上执行,也就是列印 "Hello!"讯息。 </P>
<P>首先说明LocalHost aglet: 在此程式中只有run()这个成员函数,是此aglet
执行绪本身进入执行状态的进入点。接著为了要动态产生一个新的aglet,必须透过 AgletContext来产生,并传回新的
aglet之proxy。然後透过proxy将新的 aglet派送到指定的远端工作站。 </P>
<P>然後是Hello aglet : 在这个程式中有 run()和 onCreation()两个成员函数,其中
onCreation()会在本身aglet产生时被执行,先做一些初始化的动作,在此加入 MobilityListener( )这个介面,当有
Mobility事件发生时,即会执行适当的方法(method)。也就是说,若此 Hello aglet被分派时, MobilityListener(
)会收到系统产生的 Mobility事件,然後执行
onDispatching()。接著进入run()函式,首先用一个布林变数判断本身是否在本地主机上。若不是则会印出" Hello!"讯息。 </P>
<TABLE>
<TBODY>
<TR>
<TD><IMG src="images/aglet_f5.gif"> </TD></TR>
<TR>
<TD>
<CENTER>图 5. 范例程式的作用关系图</CENTER></TD></TR></TBODY></TABLE><BR><BR><B>表 1.
LocalHost.java</B> <BR><BR>
<P align=center>
<TABLE width="90%">
<TBODY>
<TR>
<TD class=page><PRE>
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){}
}
}
</PRE></TD></TR></TBODY></TABLE></P><PRE></PRE><BR><BR><BR><B>表 2. Hello.java</B> <BR><BR>
<P align=center>
<TABLE width="90%">
<TBODY>
<TR>
<TD class=page><PRE>
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){}
}
}
</PRE></TD></TR></TBODY></TABLE></P><PRE></PRE><A name=six>六、参考资料</A>
<DL>
<DT>
<DD><A name=1>[1]</A> Mitsuru Oshima and Guenter Karjoth, "Aglets
Specification (1. 0)," <A
href="../../www.trl.ibm.co.jp/aglets/spec_version10.html">http://www.trl.ibm.co.jp/aglets/spec_version10.html</A>,
May 20th, 1997.
<DD><A name=2>[2]</A> Danny B. Lange and Daniel T. Chang," IBM Aglets
Workbench White Paper," <A
href="../../aglets.trl.ibm.co.jp/documentation.html">http://aglets.trl.ibm.co.jp/documentation.html</A>
, September 9, 1996.
<DD><A name=3>[3]</A> Chong Xu and Dongbin Tao, "Building Distributed
Application with Aglet," <A
href="../../www.cs.duke.edu/~chong/aglet/default.htm">http://www.cs.duke.edu/~chong/aglet/</A>,
1997.
<DD><A name=4>[4]</A> Danny B. Lange and Mitsuru Oshima, "Programming
and Deploying Java Mobile Agents with Aglets," ISBN: 0-201-32582-9,
1998. </DD></DL></TD></TR></TBODY></TABLE>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -